aralejs / events

Events Utility
aralejs.org/events/
34 stars 41 forks source link

增加 once #6

Closed popomore closed 11 years ago

popomore commented 11 years ago

是否需要增加这个 api

var e = new Events();
e.once('event', callback);
e.trigger('event');
e.trigger('event'); // 不执行
hotoo commented 11 years ago

场景?

popomore commented 11 years ago

某些 callback 只想执行一次

比如在 show 之后要插入一个 dom,这个操作做一次就行了。

.once('after:show', callback)
hotoo commented 11 years ago

这应该是 callback 自己的事,跟 event 没关系。 event trigger 就是 trigger 了,是否执行或执行几次是 callback 的事。

popomore commented 11 years ago

从 api 看 trigger 也比较简单,和原来一致,原来 trigger 几次现在还是几次。但是有了 once 能让事情更简单。

lizzie commented 11 years ago

同意 @hotoo. 没必要增加 event 的 once 啊, 避免重复调用 callback, 应该由 callback 来处理. 因为只有使用者才知道是否是重复还是一次.

有了 once 更简单的话, 可以直接用 http://underscorejs.org/#once 方法或类似的函数封装下 callback.

popomore commented 11 years ago

不觉得自己处理很麻烦么,还需要在外部指定一个状态。

once 也是事件注册,只是 on 的一个延伸。

afc163 commented 11 years ago

命名是 underscore 的 once 还是 jquery 的 one

lizzie commented 11 years ago

想要实现的是 once, 不是 jquery 的 one. 要实现 jq的one 直接用jq就好了啊.

On Mon, May 20, 2013 at 3:38 PM, afc163 notifications@github.com wrote:

是 underscore 的 once 还是 jquery 的 one?

— Reply to this email directly or view it on GitHubhttps://github.com/aralejs/events/issues/6#issuecomment-18135560 .

hotoo commented 11 years ago

觉得麻烦就增加特定场景的支持,这个要慎重。基础类库是否应该帮助业务覆盖全面的场景?

我觉得基础类库只需要提供业务代码覆盖特定场景的能力即可。保持高内聚,做好自己应该做的事情就好了。

hotoo commented 11 years ago

对于 once,我觉得合理的做法是:

evt.on("once", function(){
  // 也可以考虑使用状态标识。
  evt.off("once", arguments.callee);
  // do something one time.
})
popomore commented 11 years ago

@afc163 是 backbone 的 once

http://backbonejs.org/#Events-once