集合创建函数触发添加事件太快

时间:2013-08-07 08:50:31

标签: backbone.js

(使用Backbone 0.9.10)

我有一个列表视图,用户可以单击按钮显示模态视图。列表视图有一个计数器,显示列表中包含的项目数量。单击模态视图中的按钮会对传递到两个视图的集合执行create。这会在列表视图中触发add事件,而该事件又会运行此功能:

renderCount: function () {
    // Container for model count
    var $num = this.$el.find('.num');

    if ($num.length > 0) {
        // 'count' is a value returned from a service that
        // always contains the total amount of models in the
        // collection. This is necessary as I use a form of
        // pagination. It's essentially the same as
        // this.collection.length had it returned all models
        // at once.
        $num.html(this.collection.count);
    }
}

但是,在集合有机会更新模型计数之前,add似乎会立即被解雇(因为应该是,根据文档)。我调查了sync,但似乎没有做任何事情。

如何确保在调用renderCount之前更新集合?

以下是列表视图initialize函数,供参考:

initialize: function (options) {
    this.collection = options.collection;
    this.listenTo(this.collection, 'add remove reset', this.renderCount);

    this.render();
}

修改 事实证明我忘了在模态视图中重新获取success上的集合。

2 个答案:

答案 0 :(得分:0)

$num.html(this.collection.count);

应该是:

$num.html(this.collection.size());

Backbone.Collection使用从下划线导入的方法,这里是list:http://backbonejs.org/#Collection-Underscore-Methods

答案 1 :(得分:0)

原来我忘记在模态视图中重新获取success上的集合。