0

这是我的步骤:

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

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

  3. 做extendedCollection.remove(xModel);

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

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

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

帮助?

4

1 回答 1

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
于 2013-10-07T22:02:35.290 回答