2

これは私の問題です:

  • コレクションを保持するコンテナ ビューがあります。
  • ページの読み込み時に、いくつかのモデルを取得し、このコレクションにそれらを入力してから、モデルをレンダリングします
  • 着火イベント
  • このイベントが発生したら、API を呼び出したい (入力パラメーターに基づいてモデルを返す)
  • 次に、コレクションからすべての既存のモデルを削除し、新しいモデルを再設定してから、モデルをレンダリングします

これは、モデル/コレクション/ビューをセットアップする方法です

var someModel = Backbone.Model.extend({});

var someCollection = Backbone.Collection.extend({
    model: someModel,
    url: "api/someapi"
});

var someView = Backbone.View.extend({

    events: {
        "click #refresh": "refreshCollection"
    },

    initialize: function () {
        this.collection.bind("reset", this.render, this);
    },

    render: function () {
        // render stuff
    },

    refreshCollection: function (e) {
        this.collection.fetch({data: {someParam: someValue});
        this.render();
    }

});

var app = function (models) {
    this.start = function () {
        this.models = new someCollection();
        this.view = new someView({collection: this.models});
        this.view.reset(models);
    };
};

私の関心はここにあります:

    refreshCollection: function (e) {
        this.collection.fetch({data: {someParam: someValue});
        this.render();
    }

いくつかのパラメーターを渡すと、API はモデルの json 配列を返します。コレクション内のすべての既存のモデルを取り除き、返されたすべてのモデルをコレクションに入れ、ビューを更新したい (render() を使用)

これは、collection.set または collection.reset で可能であると理解しています。これらは両方ともモデルの配列を取り込みます。渡すモデルの配列がありません。

私は試した:

this.collection.fetch({
    data: {someParam: someValue},
    success: function (response) {
        doSomethingWith(response.models)
    }
});

しかし、モデルを手に入れたらどうしたらいいのかわからない。

正しい方向にプッシュしていただければ幸いです。

4

1 に答える 1

9

細かいマニュアルから:

フェッチ collection.fetch([options])

[...] モデル データがサーバーから返されると、setを使用して、取得したモデルを (インテリジェントに) マージします。渡し{reset: true}た場合、コレクションは (効率的に) resetになります。

reset: trueしたがって、オプションに含める必要があるだけで、コレクションのコンテンツをフェッチされたモデルに置き換えるためにfetch呼び出されます。reset

this.collection.fetch({
    data: { ... },
    reset: true
});
于 2013-09-21T05:33:47.870 に答える