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 inside
initialize
只要调用方在实例化集合后立即绑定其事件处理程序,就应该可以工作(您可能希望记录这种行为)。
p = new Posts
p.on('postsLoading', -> console.log('loading'))     
p.do_things()