コレクション全体を節約するためのベストプラクティス?
-
14-11-2019 - |
質問
私はコレクションを持っていて、私はそのモデルの多くを変更しました。単一のHTTPリクエストを使用してすべての変更を保存する最善の方法は何ですか?
解決
通常、RESTバックシンドをシングルインスタンス作成/更新を処理します。オブジェクトの配列を受け入れるように変更する必要があります。
は、クライアント側では、Backbone.sync関数に直接行く必要があります。
Backbone.sync = function(method, model, options)
.
この場合、モデルはモデルの配列であるべきです。この方法は「作成」または「保存」になり、オプションはjQuery Ajax呼び出し(エラー、成功など)と同じタイプのオプションを取ります。
他のヒント
Backbone.Collection
を拡張する必要があり、それぞれのモデルsave()
を確認するhasChanged()
メソッドを指定します。
それはBackbone.sync
を呼び出すべきです。これは、おそらくカスタム同期関数に少し拡張する必要があるでしょう。カスタムBackbone.sync
関数を使用している場合は、必ずコレクションに設定してください。
var CollectionSync = function(method, model, [options]) {
// do similar things to Backbone.sync
}
var MyCollection = Backbone.Collection.extend({
sync: CollectionSync,
model: MyModel,
getChanged: function() {
// return a list of models that have changed by checking hasChanged()
},
save: function(attributes, options) {
// do similar things as Model.save
}
});
.
異なるアプローチ(コレクションを表すモデルを使用して)はここにあります。" "" "" "" "" "Backbone.js - backbone.syncまたはjquery.ajax?
このコードは、変更されたモデルの保存方法を呼び出すためだけに、コレクションプロトタイプに新しいメソッドを追加します。それは私のために働きました:
Backbone.Collection.prototype.saveAll = function(options) {
return $.when.apply($, _.map(this.models, function(m) {
return m.hasChanged() ? m.save(null, options).then(_.identity) : m;
}));
};
.
gistリンク: https://gist.github.com/julianitor/701c677279bac1529b88
所属していません StackOverflow