在create上重新获取主干集合

时间:2014-09-10 20:39:31

标签: javascript backbone.js

我有一个要管理的“条目”列表。列表显示在屏幕的下半部分,而输入表单显示在页面顶部。 每个条目都有一个“entryDate”属性。

该列表绑定到选定的“月”期间(例如2014年8月),它仅显示所选日期范围之间的条目。这些条目也是分页的。我每页显示X个条目,无限滚动。列表的排序顺序在entryDate下降,最近的条目首先显示。

如果entryDate总是currentDate,我可以将新行添加到列表中,而不重新渲染整个事物,但事实并非如此。我认为检查输入的日期是否包含在选定的期间内是否过分,或者不是,只是要知道我是否必须重新加载列表。

现在,我想通过在每次成功插入时获取/重置列表来轻松实现。但是......我不能这样做。

我的观看代码中的代码段:

initialize: function() {

        this.collection = new EntriesCollection();
        this.fetchTransactions();
        this.listenTo( this.collection, 'reset', this.render );
        this.listenTo( this.collection, 'add', this.fetchTransactions );

        this.rowViews = [];
        this.render();
    },

fetchTransactions: function() {
        this.collection.fetch({ reset:true });
    },

addEntry: function() { // on form submit

        var entryData = {};
// load data from form...
        this.collection.create( entryData );
    },

这不能正常工作,不会重新获取列表。

'add'集合事件应该在获取之前或之后触发吗?

3 个答案:

答案 0 :(得分:1)

计算事件/何时开火时的另一个有用的方法是将它们全部记录下来。

所以你可以做点什么

events: {
  "all": "log"
}

log: function(e) {
  console.log e;
}

你将能够看到每个事件/什么时候发生火灾。我发现在尝试确定要附加到/不适合的事件时非常有用。

答案 1 :(得分:1)

您正在寻找的是Wait选项。

http://backbonejs.org/#Model-savehttp://backbonejs.org/#Collection-create

详细说明了这一点

提供create {wait:true}选项将确保只有在服务器成功接受add时才会触发create。正常的行为是将模型添加到集合中,然后将其发送到服务器。 wait命令改变了这一点。

答案 2 :(得分:0)

尝试更改此行:

this.listenTo( this.collection, 'reset', this.render );

this.listenTo( this.collection, 'sync', this.render );