Events 发送前传递到主干网';s Fetch不允许触发事件
我有一个骨干收藏。我使用Events 发送前传递到主干网';s Fetch不允许触发事件,events,backbone.js,coffeescript,backbone-events,Events,Backbone.js,Coffeescript,Backbone Events,我有一个骨干收藏。我使用fetch在初始化时将Facebook帖子延迟加载到模型中 出于某种奇怪的原因,当我尝试使用beforeSend处理程序触发事件时,事件不会触发。我可以调用任何函数,但如果任何函数尝试使用@trigger“eventName”,事件就不会以我能够观察到的方式触发。在上面的示例中,console.log函数工作正常,但触发器失败 有什么想法吗?成功和错误处理程序工作得非常出色。您正在initialize方法中调用fetch,因此在触发事件之前,没有任何东西有机会绑定到该集
fetch
在初始化时将Facebook帖子延迟加载到模型中
出于某种奇怪的原因,当我尝试使用beforeSend
处理程序触发事件时,事件不会触发。我可以调用任何函数,但如果任何函数尝试使用@trigger“eventName”
,事件就不会以我能够观察到的方式触发。在上面的示例中,console.log函数工作正常,但触发器失败
有什么想法吗?成功和错误处理程序工作得非常出色。您正在
initialize
方法中调用fetch
,因此在触发事件之前,没有任何东西有机会绑定到该集合。创建集合实例时会调用initialize
方法,这意味着您在构造函数返回之前调用fetch
,但在绑定到其事件之前需要集合实例
考虑更像这样的情况:
class Posts extends Backbone.Collection
do_things: ->
@fetch
beforeSend: () =>
console.log "about to fetch..."
@trigger "postsLoading"
success: (collection, response) =>
debug "successfully loaded ajax"
@trigger "postsLoaded"
error: (collection, response) => @trigger "postsLoadingError"
然后,如果您这样做:
p = new Posts
p.on('postsLoading', -> console.log('loading'))
p.do_things()
您将看到确实触发了postsLoading
事件
演示:
这个故事的寓意很简单:
如果您关心事件侦听器,请不要在构造函数中调用fetch
我爱你。我是否可以设置对象中的另一个函数超时,以便在获取之前等待一个勾号,并且在对象初始化时仍然具有获取的好处?@RandallB:old
setTimeout(…,0)
trick insideinitialize
只要调用方在实例化集合后立即绑定其事件处理程序,就应该可以工作(您可能希望记录这种行为)。
p = new Posts
p.on('postsLoading', -> console.log('loading'))
p.do_things()