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);たら削除機能を呼び出す必要がありますsaveconsole.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.save table() を実行すると、古いモデルではなく、新しい モデルが保存されました。そのため、接続されているイベント ハンドラーが実際にトリガーされていました。tablethis.modelthis.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)にバインドされているイベントハンドラーをトリガーしません。

すでにモデルがあるのに、なぜ別のモデル(テーブル)を作成するのですか?(このモデル) ?

* アップデート *

私はあなたが何をしようとしているのか本当に理解していませんが、おそらくこれを試してみてください:

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