骨干:收藏不会重置

时间:2015-07-07 19:28:18

标签: javascript backbone.js fetch reset

我尝试.reset()清除我的collection,然后再调用.fetch()来检索该网页的新数据。

但由于某些原因,当我导航到另一个页面时,我的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很新,所以我不确定我是否正确处理了这个问题。我做错了什么?

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

2 个答案:

答案 0 :(得分:3)

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

 collection.fetch({reset: true});

根据Backbonejs文档,
"当模型数据从服务器返回时,它使用set来(智能地)合并获取的模型,除非你传递{reset:true},在这种情况下集合将被(有效地)重置。 #34; http://backbonejs.org/#Collection-fetch

答案 1 :(得分:1)

集合的reset函数不会返回集合对象,因此您无法链接resetfetch。将initialize函数的最后一行更改为两行:

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

旁注:没有理由将{add: true}传递给fetch。任何进入该系列的新模型都会自动触发您正在收听的“添加”事件。