以下是我的步骤:
声明Backbone colleciton的扩展集合:extenedCollection = $ .extend({},backboneCollection,decorator);
使用扩展集合构建复合视图。
执行extenedCollection.remove(xModel);
预期结果: 复合视图将捕获remove事件,并将从复合视图中删除相关的项视图。
实际结果:Backbone的remove()函数触发“remove”事件。 _initialEvents中的Marionette监听“remove”事件,但是在触发时没有捕获remove事件,因此不执行函数“removeItemView”。
注释:使用代码extenedCollection = $ .extend(backboneCollection,decorator);一切正常。但是我必须在扩展原始主干集合时创建新对象。
帮助?
答案 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