为什么我的Backbone Collection重置事件没有被触发?

时间:2013-09-23 13:43:14

标签: javascript ruby-on-rails-3 backbone.js coffeescript

我浏览了Railscast教程并完成了所有工作。研究一个快速的原型,看看Backbone是否可行,但我搞砸了什么,我不知道我做错了什么。我在Backbone 1上。

查看

class Shsh.Views.AssetsIndex extends Backbone.View

template: JST['assets/index']

initalize: ->
  @collection.on('reset', @render, this)

render: ->
  $(@el).html(@template(assets: @collection))
  console.log('rendered')
  this

路由器

class Shsh.Routers.Assets extends Backbone.Router
  routes: 
    '': 'index'

  initialize: ->
    @collection = new Shsh.Collections.Assets()
    @collection.fetch({reset: true})

  index: ->
    view = new Shsh.Views.AssetsIndex(collection: @collection)
    $('#container').html(view.render().el)

视图被渲染得很好,但@assets的长度又回到0.我可以通过控制台中的步骤,当我再次渲染视图时,它返回正确的长度。我做错了什么?

编辑:

我也确实有一个集合和模型。这里的代码是Backbone On Rails生成的所有样板文件。

2 个答案:

答案 0 :(得分:0)

您在路由器创建过程中过早地呼叫fetch()。应该在特定的路由代码中调用。你实现它的方式,获取和重置可能会在触发路由之前完成,因此你会在被激活后开始听reset

答案 1 :(得分:0)

我是个白痴。在Shsh.Views.AssetsIndex中,Initialize拼写错误。