Backbone:Collection 不会重置

Backbone: Collection Won't Reset

我正在尝试 .reset() 清除我的 collection,然后调用 .fetch() 以检索该页面的新数据。

但由于某些原因,当我导航到另一个页面时,我的 collection 没有被重置并获取新数据。当我手动重新加载页面时,它只会重置 collection 并获取新数据。

class ProjectPostItemsView extends Backbone.View
  template: JST['project_post_items.ejs']
  posts_item_views: []

  initialize: ->
    super()
    @listenTo( @collection, 'add', @displayPostItem )
    @collection.reset().fetch(add: true)

  displayPostItem: (project) ->
    view = new ProjectPostItemView(model: project)
    @posts_item_views.push( view.on('render', =>
      @$('.post-items').append(view.$('>'))) )

  render: (options) ->
    super(options)

我是 Backbone 的新手,所以我不确定我是否正确处理了这个问题。我做错了什么?

感谢任何帮助。提前致谢!

集合的 reset 函数不 return 集合对象,因此您不能链接 resetfetch。将initialize函数的最后一行改为两行:

@collection.reset()
@collection.fetch()

旁注:没有理由将 {add: true} 传递给 fetch。任何进入该集合的新模型都会自动触发您正在侦听的 "add" 事件。

与其在获取之前调用重置,更好的方法是使用:

 collection.fetch({reset: true});

根据 Backbonejs 文档,
"When the model data returns from the server, it uses set to (intelligently) merge the fetched models, unless you pass {reset: true}, in which case the collection will be (efficiently) reset." http://backbonejs.org/#Collection-fetch