确认框问我无数次

Confirm-Box asking me endless times

如果我真的确定我要删除该文件,我总是被问到没完没了。我不知道为什么这个事件会触发多次。

我正在使用 backbone.js。

这是我的视图(已缩短)。单击 "span.delete" 它会触发删除功能(它工作完美)。

XFFView = Backbone.View.extend({
        itemTpl: _.template($("#xff-item").html()),
        events: {
            "click span.delete" : "remove"
        },
        remove: function() {
                 app.delFromList(this.$el.children('li').data('target'));
                 this.$el.remove();
        } 
});

这是 delFromList 函数,它触发了确认请求。我一次又一次地被问到,直到我点击 'cancel'。

delFromList: function(id) {
        if (confirm('Are you sure you want to delete this file?')) {
                this.collection.get(id).destroy();
        }
},

相信我已经找到你的问题了,正如我所料:

XFFView = Backbone.View.extend({
            itemTpl: _.template($("#xff-item").html()),
            events: {
                    "click span.delete" : "remove",
                    "click span.abort" : "abort"
            },
            initialize: function() {
                    this.listenTo(this.model, "change", this.render);
                    this.listenTo(this.model, "destroy", this.remove);
            },
            render: function() {
                    this.$el.html(this.itemTpl(this.model.toJSON()));
                    return this;
            },
            remove: function() {
                    app.delXFFFromList(this.$el.children('li').children('span.delete.badge').data('target'));
                    this.$el.remove();
            }

据我所知,这一行:

this.listenTo(this.model, "destroy", this.remove);

正在侦听要删除的模型,它在这一行中:

this.collection.get(id).destroy();

然后将再次调用此代码:

remove: function() {
       app.delXFFFromList(this.$el.children('li').children('span.delete.badge').data('target'));
       this.$el.remove();
}

基本上是将您的代码投入无限循环,或者直到您的集合清空。

要么改变这一行

this.listenTo(this.model, "destroy", this.remove);

调用 this.destroy,或将您的删除方法重命名为类似 removeEntry 的名称,以免与删除视图混淆。