0

我正在尝试将功能添加到我的应用程序中,以便我可以更新我的数据库,然后更新 DOM。数据库更新得很好,但 DOM 没有。以下是我的部分观点:

 App.Views.Table = Backbone.View.extend({
    tagName: 'span',
    initialize: function(options) {
        this.model.on('change', this.render, this);
        this.model.on('update', this.remove, this);

        this.template = this.options.template;
        this.url = this.options.url;
    },
    events: {
        'click .verify': 'verify',
        'click .spam': 'spam',
        'click .duplicate': 'duplicate'
    },
    verify: function(e) {
        id = e.currentTarget.id;
        table = new App.Models.Table({ id: id });
        table.urlRoot = this.url;
        table.fetch();
        table.toJSON();
        table.set('verified', 1);
        table.save();

    },
    spam: function(e) {
        ...

    },
    duplicate: function(e) {
            ...
    },
    remove: function() {
        this.$el.remove();
        console.log('hello');
    },
    retrieveTemplate: function(model) {
        return _.template($('#' + this.template).html(), model);
    },
    render: function() {
        //console.log(this);
        this.$el.html(this.retrieveTemplate(this.model.toJSON()));
        return this;
    }
});

据我了解,完成后this.model.on('update', this.remove, this);应该调用我的删除函数save。但是回调没有触发,因为我没有得到console.log并且我的 DOM 没有被更新。我究竟做错了什么?我遵循了一个教程,但在教程中一切正常。

4

2 回答 2

2

没有update事件。我想你的意思是sync

http://backbonejs.org/#Events-catalog

"sync" (model, resp, options) — when a model has been successfully synced with the server.

我发现调试的另一个有用方法是使用all事件来查看触发了哪些事件。

编辑:

经过一些调试,该verify()函数的目标是将验证的属性保存到模型中。为此,我们需要更改verify()

this.model.set('verified', 1);
this.model.save();

而不是创建一个新的App.Model.Table并将其设置为table变量。执行table.save() 是保存 table模型,而不是旧模型this.model。这就是为什么附加的事件处理程序会this.model被触发。

于 2013-01-14T18:39:49.187 回答
0

Backbone.js 中没有“创建”或“更新”事件。这就是你的 remove() 回调没有触发的原因。

有关 Backbone 中可能事件的目录,请参见http://backbonejs.org/#Events-catalog

更新

在更仔细地查看您的代码后,答案很明确。它们是不同的模型:

initialize: function(options) {
    this.model.on('change', this.render, this);
    this.model.on('sync', this.remove, this);

table = new App.Models.Table({ id: id });
...
table.save();

对象上发生的事件table不会触发绑定到完全不同模型(this.model)的事件处理程序。

既然已经有了模型,为什么还要创建另一个模型(表)?(this.model) ?

* 更新 *

我真的不明白你想要做什么,但也许试试这个:

table = new App.Models.Table({ id: id });
table.on('sync', this.remove, this);
于 2013-01-14T18:43:14.880 回答