1

我有一个由 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 - 尽管我怀疑这个包装结构是否与这个问题有任何关系。

4

1 回答 1

-1

你究竟是如何分享你的收藏的?

将控制台日志添加到您的集合中初始化
可能调用了两次的初始化方法

于 2013-08-22T22:55:38.310 回答