11

このようにバックボーンモデルの変更イベントにバインドします。

this.model.on( "change", this.render, this );

モデルの最新バージョンを取得して、ビューを強制的にレンダリングしたい場合があります。だから私はこれをします

this.model.fetch();

残念ながら、model.fetch()は、新しいデータが以前にモデルに格納されていたものと異なる場合にのみ、changeイベントを発生させます。

変更イベントをトリガーするかどうかに関係なく、フェッチが完了したときにthis.renderコールバックを常にトリガーするにはどうすればよいですか?

(事前に)あなたの助けに感謝します

4

4 に答える 4

13

$.ajax成功コールバックを使用できますが、モデルのバックボーンsyncerrorイベントをリッスンすることもできます。syncサーバーへの呼び出しが成功した後に発生し、サーバーerrorへの呼び出しが失敗した後に発生します。

this.model.on('sync', this.render, this);
this.model.on('error', this.handleError, this);
于 2013-02-17T22:46:06.037 に答える
1

このfetchメソッドは、オプションで、成功とエラーのコールバックを受け入れることができます。render最も簡単な解決策は、ビューを成功コールバックに入れることです。返されたjqXHRpromiseを使用することもできますが、AJAXが(jQueryごとに)成功するがモデルの初期化が失敗する場合は、その使用法に問題がある可能性があります。

于 2013-02-17T06:29:28.803 に答える
1

コード構造はわかりませんが、ビュー内でモデルをフェッチしている場合は、次のようなものを使用できます

var that = this;
this.model.fetch().done(function () {
    that.render();
});

それ以外の場合、ビューの外でモデルをフェッチしている場合は、約束をビューに渡して、同様のものを作成できます。

var promise = model.fetch();
// other code here
var view = new View({
    model: model,
    promise: promise
});

ビュー内、たとえば初期化

View = Backbone.View.extend({
    initialize: function(){
        this.options.promise.done(function () {
            // your code here
        });
    }
});
于 2015-01-27T21:09:41.443 に答える
1

このソリューションはどうですか?

// emit fetch:error, fetch:success, fetch:complete, and fetch:start events
fetch: function(options) {
  var _this = this;

  options = options || {};

  var error = options.error;
  var success = options.success;
  var complete = options.complete;

  options.error = function(xhr, textStatus, errorThrown) {
    _this.trigger('fetch:error');
    if (error) error(xhr, textStatus, errorThrown);
  };

  options.success = function(resp) {
    _this.trigger('fetch:success');
    if (success) success.call(options.context, resp);
  };

  options.complete = function() {
    _this.trigger('fetch:complete');
    if (complete) complete();
  };

  _this.trigger('fetch:start');

  return Backbone.Model.prototype.fetch.call(this, options);
}

要旨へのリンクhttps://gist.github.com/fedyk/23761ce1236c5673fb84

于 2015-07-15T12:25:15.337 に答える