cssmagic / action

Easy and lazy solution for click-event-binding.
95 stars 32 forks source link

为啥事件触发时回调里不返回event对象呢? #29

Closed xingmolu closed 8 years ago

xingmolu commented 8 years ago

很多时候在事件函数里需要使用event对象的

_handle(actionName, this, ev)

return fn.call(context || window, ev)
cssmagic commented 8 years ago

谢谢建议。其实我也一直在考虑这一点,虽然技术实现并不困难,但因为要改变接口,我就比较谨慎。

我想听一下你的看法:

xingmolu commented 8 years ago

嗯,目前我遇到了这个需求,在一个点击一个大的元素需要隐藏这个元素,但是如果点击里面某个子元素则不会隐藏,我通过e.target来判断的。

之前我写插件一半的事件触发都会返回事件对象,很多时候没有这个不行。

trigger时可以不返回,只不过使用时需要判断下

if(e){
}

还有更好的方式吗?

cssmagic commented 8 years ago

目前我遇到了这个需求,在一个点击一个大的元素需要隐藏这个元素,但是如果点击里面某个子元素则不会隐藏

听起来这是一个比较复杂的 UI 效果,能具体再说一说(这个需求的逻辑)吗?

xingmolu commented 8 years ago

一个类似于花瓣详情的效果,点开列表中的一个,再当前页面弹出详情。

<div class="picture-view-window" data-action="close-detail">
    <div class="view-datil">
     <!--详情内容-->
    </div>
    <a javascript:; class="window-close"><a>
</div>
.picture-view-window{
     position: fixed;
     left: 0;
     right: 0;
     top: 0;
     bottom: 0;
     padding: 50px 0 0;
     z-index: 20;
     background: rgba(0,0,0,0.4);
     background: #000 \9;
     filter: alpha(opacity=40);
     overflow: auto;
}

.view-datil{
    position: absolute;
    left: 50%;
    margin: 0 0 0 -495px;
}

需要点击.picture-view-window.window-close来关闭详情,但是点击.view-datil不会关闭。

cssmagic commented 8 years ago

好的,我顺便看了一眼花瓣网,懂了。

我说下我的看法吧。我觉得问题不在于 Action 或者是事件机制是不是够强,而是结构需要理一下:

body
    div.list  // 列表
        …
    div.picture-view-window  // 详情窗口
        div.view-detail  // 详情主体
            …
        div.overlay @data-action='close-detail'  // 详情遮罩层
        a.window-close @data-action='close-detail'  // 详情关闭按钮

这样,用 div.overlay 来承担 “点击空白处关闭” 的任务,整个结构和事件会清晰很多。

让父元素(div.picture-view-window)去判断点击事件的来源再做不同处理,这个做法看似高端,但把事情搞复杂了,没有必要。

xingmolu commented 8 years ago

恩,这个场景下是可以的。不过我一般的写插件,事件都会返回原生event或者加工过的event

cssmagic commented 8 years ago

嗯,理解你的意思。不过我对此还是比较谨慎。

总体上,我希望 Action 是足够简单的:如果使用者真的需要操心具体的事件对象,那可能说明当前的场景太过复杂,用 Action 来处理事件可能就不是一个合适的选择。

另外,.trigger() 这个 API 也会比较尴尬。写每个动作函数时都需要判一下有没有 ev,这个解决方案真的很难接受,使用成本一下子就上去了。

因此,在找到非常明朗的理由之前,应该不会加这个功能。望理解。

xingmolu commented 8 years ago

嗯,可以。我fork后改了,确实大多数场景换个方案都可以实现。暂时没有遇到非要ev的问题。谢谢