【问题标题】:Backbone: Collection Won't Reset骨干:收藏不会重置
【发布时间】:2015-07-07 19:28:18
【问题描述】:

我正在尝试.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 很陌生,所以我不确定我是否正确处理了这个问题。我做错了什么?

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

【问题讨论】:

    标签: javascript backbone.js fetch reset


    【解决方案1】:

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

     collection.fetch({reset: true});
    

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

    【讨论】:

    • 哦,当然!比我的答案好多了。干得好:)
    • 谢谢!如果你这么认为,为什么不给我点赞呢? :)
    • @slinhart 已经传递给fetch() 方法的add: true 怎么样?
    • 如果要为集合中的每个模型触发添加事件,请执行 collection.fetch({reset: true, add: true});再次,查看文档,所有这些信息都在那里。干杯
    • @slinhart 我已经尝试过了,当我转到我的页面时,它会加载正确的集合,但是当我导航到另一个页面时,它会加载相同的集合并出现此错误:Uncaught Error: Duplicate id: can't add the same model to a collection twice。直到我手动刷新它才会返回正确的集合。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-03
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      相关资源
      最近更新 更多