应用程序对象触发自定义事件两次?Marionette v1.0



我有一个由两个集合实际共享的集合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中,因为集合在这两个视图之间共享。第二天的导航链接由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事件。我已经检查了集合Days只接收一个删除事件,并且只删除了一个模型,因此appts:save触发器被称为ones。

    ApptManager.listenTo(ApptManager, "appts:save", function() {
        console.log("Saving appts!");
        appts.set("days", days);
        appts.save();
    });

"保存appts"被打印两次,appts被PUT两次!

有线索吗?!

使用Marionette v1.1.0。我有其他模块和应用程序,显示标题导航栏视图和其他页面。我的应用程序结构基于Backbone.Marionette.js:A GentleDavid Sulc介绍-尽管我怀疑这种包装结构是否与这个问题有关。

您究竟是如何共享您的收藏的?

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

最新更新