【问题标题】:Why isn't my Backbone Collection reset event firing?为什么我的 Backbone Collection 重置事件没有触发?
【发布时间】:2013-09-28 10:37:41
【问题描述】:

我浏览了 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 生成的样板。

【问题讨论】:

  • 在你看来试试@listenTo @collection, 'reset', @render

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


【解决方案1】:

您在创建路由器时调用fetch() 太早了。应该在特定的路由代码中调用。您实现它的方式,获取和重置可能在触发路由之前完成,因此您将在触发后开始收听reset

【讨论】:

  • 移到实际的索引函数中还是不行。
【解决方案2】:

我是个白痴。在 Shsh.Views.AssetsIndex 中初始化拼写错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2021-01-18
    • 2012-01-11
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多