我有一个由 2 个集合实际共享的集合 Days - 用于添加或删除天数(编辑)的集合视图 v1 和显示可单击链接以导航到单个天的 itemViews 的复合视图 v2。
AppointmentManager = new Marionette.Application //app object.
//sharing collection days among two views v1, v2.
var days = new Entities.Days(ApptModel.get("apptDays"));
var v1 = new EditCollectionView({collection: days});
var v2 = new ListCompositeView({collection: days});
要删除第 2 天的约会,用户单击 collectionview v1 中 dayItemView2 上的删除按钮,这也会导致从 collection view v1 中删除这一天,如下所示:
onDeleteDayClicked() {
this.model.collection.remove(this.model);
}
此删除也反映在视图 v2 中,因为集合在这两个视图之间共享。第 2 天的导航链接被 Marionette 自动从 v2 中删除。
集合 Days 在初始化时侦听此删除事件。为了确保这些更改在服务器端得到反映和保存(以及作为更大模型的一部分存储的其他信息位,也存储天的集合),我在应用程序管理器上触发了一个保存事件:
Entities.Days = Backbone.Collection.extend({
initialize: function(options) {
this.on("remove", function(model,collection,index) {
AppointmentManager.trigger("appts:save");
}
});
但是在我的 ApptController 中,我收到了两次 apps:save 事件。我已经检查了 Collection Days 只收到一个删除事件并且只有一个模型被删除,因此 appts:save 触发器被称为。
ApptManager.listenTo(ApptManager, "appts:save", function() {
console.log("Saving appts!");
appts.set("days", days);
appts.save();
});
“保存 appts”被打印两次,appts PUT 两次!
有什么线索吗?!
使用木偶 v1.1.0。我还有其他显示标题导航栏视图和其他页面的模块和应用程序。我的应用程序结构基于 Backbone.Marionette.js: A Gentle Introduction by David Sulc - 尽管我怀疑这个包装结构是否与这个问题有任何关系。