集合中的骨干重置事件

时间:2012-07-13 14:24:10

标签: backbone.js

Backbone重置事件如何工作? 据我了解

  1. 从集合中删除所有模型
  2. 将新“已获取”的模型添加到集合
  3. 触发重置事件
  4. 在我的情况下,每个模型在SVG上绘制一些东西,所以我应该在从集合中删除模型之前调用remove函数。从集合中删除模型时会触发哪个事件?

2 个答案:

答案 0 :(得分:9)

正如@Paul所说,在reset之前没有触发预定义事件。但是,您可以通过覆盖集合中的reset方法来提供自己的方法。例如,

var SVGCollection = Backbone.Collection.extend({
    reset: function(models, options) {
        options = options || {};

        if (!options.silent) {
            this.trigger('prereset', this, options);
        }

        Backbone.Collection.prototype.reset.call(this, models, options);
    }
});

示例用法

var c = new SVGCollection([
    {id: 1},
    {id: 2}
]);
c.on('prereset', function() {
    console.log(c.pluck('id'));
});
c.on('reset', function() {
    console.log(c.pluck('id'));
});
c.reset({id: 3});

请参阅http://jsfiddle.net/nikoshr/8vV7Y/了解演示

您还可以在每个模型上触发事件。

答案 1 :(得分:3)

在删除旧模型并添加新模型后,reset被解雇是正确的。

通过reset方法从集合中删除模型时,没有触发事件。

您可能必须在集合外部保留对旧模型的引用,然后在触发重置事件时,您将引用这些模型,以便您可以在SVG上为它们调用remove函数。