1. ホーム
  2. jquery

[解決済み] 「Backbone.jsでコレクション全体を保存する方法 - Backbone.syncとjQuery.ajaxのどちらを使うか?

2023-07-10 12:56:18

質問

私はそれができることをよく知っているし、私はかなり多くの場所を見てきました(以下を含む。 コレクション全体を保存するためのベスト プラクティスですか? ). しかし、私はまだ明確ではない"正確にどのように"それはコードで書かれているのですか?(投稿では英語で説明されています。javascriptに特化した説明があれば最高なのですが :)

モデルのコレクションがあるとします。モデル自体はネストされたコレクションを持つことができます。親コレクションのtoJSON()メソッドをオーバーライドし、有効なJSONオブジェクトを取得しました。私はコレクション全体(対応するJSON)を保存したいのですが、バックボーンはその機能を内蔵していないようです。

var MyCollection = Backbone.Collection.extend({
model:MyModel,

//something to save?
save: function() {
   //what to write here?
 }

});

言いたいことがどこかにあるんだろうけど

Backbone.sync = function(method, model, options){
/*
 * What goes in here?? If at all anything needs to be done?
 * Where to declare this in the program? And how is it called?
 */
}

一旦'view'が処理を終えると、それはコレクションにサーバー上で自分自身を"save"(一括更新/作成リクエストを処理できる)するよう伝える役割を担います。

発生する質問

  1. コードでどのように/何を書いて、"配線するのか?
  2. コールバックの「正しい」場所と、"成功/エラー" コールバックを指定する方法は何ですか? バックボーンにコールバックを登録する構文がよく分からないのですが...。

もしそれが本当に厄介な仕事であれば、ビュー内でjQuery.ajaxを呼び出し、その中で this.successMethod または this.errorMethod を成功/エラーコールバックとして使用できますか?うまくいくのでしょうか?

私はbackboneの考え方と同期する必要があります。私は、コレクション全体の同期について、確実に何かを失っていることを知っています。

どのように解決するのですか?

私がすぐに思いつくのは、Backbone.Collectionのsaveメソッドをオーバーライドするのではなく、コレクションを別のBackbone.Modelでラップして、その上でtoJSONメソッドをオーバーライドすることです。そうすれば、Backbone.jsはモデルを1つのリソースとして扱い、backoneの考え方をあまりハックする必要はありません。

Backbone.CollectionはtoJSONメソッドを持っているので、ほとんどの作業はあなたのために行われることに注意してください。あなたは、ラッパーであるBackbone.ModelのtoJSONメソッドをBackbone.Collectionにプロキシするだけでよいのです。

var MyCollectionWrapper = Backbone.Model.extend({
url: "/bulkupload",

//something to save?
toJSON: function() {
    return this.model.toJSON(); // where model is the collection class YOU defined above
 }

});