扩展Backbone集合时,CompositeView不会获得“删除”事件

时间:2013-10-07 08:57:20

标签: javascript backbone.js marionette

以下是我的步骤:

  1. 声明Backbone colleciton的扩展集合:extenedCollection = $ .extend({},backboneCollection,decorator);

  2. 使用扩展集合构建复合视图。

  3. 执行extenedCollection.remove(xModel);

  4. 预期结果: 复合视图将捕获remove事件,并将从复合视图中删除相关的项视图。

    实际结果:Backbone的remove()函数触发“remove”事件。 _initialEvents中的Marionette监听“remove”事件,但是在触发时没有捕获remove事件,因此不执行函数“removeItemView”。

    注释:使用代码extenedCollection = $ .extend(backboneCollection,decorator);一切正常。但是我必须在扩展原始主干集合时创建新对象。

    帮助?

1 个答案:

答案 0 :(得分:1)

为什么不使用内置的Backbone.Collection.extend功能?它专为您正在讨论的用例而设计。

// Extend Backbone types with the Backbone.extend function
var MyCollectionType = Backbone.Collection.extend(MyDecorator);

var myCollection = new MyCollectionType(models);
var myCompositeView = new MyAwesomeCompositeView({collection : myCollection});

// Not necessary.
myCompositeView.onItemRemoved = function () {
  console.log(arguments);
};

myCollection.remove(myModel); // Event is handled by composite view