2

そのため、ユーザーがチェックボックスを介して利用可能なオプションのリストから選択しているページがあります。私は 3 つのコレクションを持っています。1 つは可能なオプションのリスト、もう 1 つは現在保存されているオプション、保存されたオプションの複製です。チェックボックスをクリックすると、クローンリストを使用してオプションを追加/削除しています。

var possibleOptions = new Backbone.Collection("/options");   
var currentUserOptions = new Backbone.Collection("/useroptions", { id: 2 });
var clonedUserOptions = new Backbone.Collection(currentUserOptions.toJSON());

このアプローチが採用された理由は、ユーザーが編集中にオプション ページをキャンセルできるため、保存ボタンをクリックしてもオプションが保持されるようにするためです。オプションがチェック/チェック解除されると、 clonedOptions が正しく更新されます。ただし、実際のリストを更新しようとすると、何も起こらないようです。

currentUserOptions.update(clonedUserOptions.toJSON());

私の期待は、バックボーンが新しいモデルのポストリクエストをトリガーし、ドキュメント( http://documentcloud.github.com/backbone/#Collection-update )に従って欠落しているモデルごとに削除することでした。これがどのように機能するかを誤解している場合はお知らせください。正しいアプローチの簡単な実例をいただければ幸いです。

ありがとう、CF

4

1 に答える 1

0

コレクションが変更されたときに、個々のモデル呼び出しでサーバーを更新する必要があることを理解しています(人々が言及したように)。これらの変更をカバーするイベントがあります。ただし、同期を使用してコレクション全体を送信できます。各モデルが追加または削除されると、新規および削除済みとしてフラグを立てることができ、保存する準備ができたら、コレクション全体を送信できます。サーバーメソッドは、コレクションが送信されたときに、適切な追加または削除操作を決定する必要があります。

一括同期を行う例を次に示します。this.collection.remove() を使用する代わりに、前述のように削除済みとしてフラグを立てたいだけかもしれません。これは、サーバーが何を削除するかを知る唯一の方法です。技術的には、すべてを削除してから、一括更新で送信されたものを追加することができます:) また、実際に削除されたものを更新するために保存するときに、サーバーからコレクションを取得または返す必要がある場合があります。これがあなたの場合に役立つかどうかはわかりませんが、「完了したら保存する」という1つのボタンの概念のページに使用しました.

    var one = new model({ id: this.collection.length + 1});
    var two = new model({ id: this.collection.length + 2 });
    var three = new model({ id: this.collection.length + 3 });
    var four = new model({ id: this.collection.length + 4 });
    var five = new model({ id: this.collection.length + 5 });


    this.collection.add(one.toJSON());
    this.collection.add(two.toJSON());
    this.collection.add(three.toJSON());
    this.collection.add(four.toJSON());
    this.collection.add(five.toJSON());

    this.collection.sync('update', this.collection, { success: function () {    console.log(this.collection.length); } });

    this.collection.remove(one);
    this.collection.remove(two);

    this.collection.sync('update', this.collection, { success: function () { console.log(this.collection.length); } });

そしてあなたの場合:

currentUserOptions.sync('update', currentUserOptions, { success: function () { //do something } });
于 2013-03-22T16:04:55.340 に答える