【问题标题】:Event is firing multiple times (Parse.com)事件多次触发(Parse.com)
【发布时间】:2012-11-13 20:23:39
【问题描述】:

我正在使用 JavaScript 框架在 Parse 中编写一个应用程序。在我看来,我有一个与“新页面”类的链接。在 JS 代码中,我有:

    events: {
        "click .new-page" : "createPage",
    }

createPage 是:

    createReel: function() {
        var self = this;
        // Get current pagelist
        var pages= new PageList;
        pages.query = new Parse.Query(Page);
        pages.query.equalTo("owner", Parse.User.current());
        pages.query.ascending("order");
        pages.fetch({
            success: function(pagelist) {
                var newPage = new Page;
                newPage .save({
                    success: function(newpage) {
                         // Redirect to page edit
                         new PageEditView();
                    }
                });
            }
        });
    }

第一次,这工作正常 - 新页面已创建,并进入该页面的编辑模式。但是,如果我随后使用“添加页面”按钮返回视图并再次单击它,我会得到 2 个新页面。如果我再做一次,我会得到 4,以此类推。

我假设事件正在“建立”,因此单击按钮的次数越多,触发事件的次数就越多。

我不知道从哪里开始寻找。

【问题讨论】:

  • 阅读 Backbone 僵尸视图,听起来您的事件没有被正确删除/解除绑定。
  • 当您使用按钮返回视图时,您是否删除了旧的 PageEditView?

标签: javascript backbone.js dom-events backbone-views backbone-events


【解决方案1】:

迟到的答案,但我刚刚遇到了类似的问题。

我犯的错误是每次需要时都重新创建视图实例。

Backbone 不是这样工作的。

视图(通常)创建一次。当他们的模型发生变化时,他们会再次被渲染。

每次用户在此行保存时,您似乎都在实例化您的视图

PageEditView();

这就是事件叠加的时候。

在您启动页面时实例化该视图一次,然后在您更新该视图的模型时呈现它。

在本机 bakbone 中,事件处理程序可以监听模型更改。不知何故,它在 Parse 主干版本中不起作用(或者我无法让它工作)。所以现在,我手动使用

PageEditView.model = model
PageEditView.render();

【讨论】:

    【解决方案2】:

    确保在调用新的 PageEditView 之前取消对事件的委托。

    【讨论】:

      猜你喜欢
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多