1

Backbone.js モデルを定義しているとします。私たちが持っているドキュメントから...

new Model([attributes], [options]) 

これは、いくつかのデフォルト属性をモデルに渡すのに最適です。モデルが渡されると、それらの属性とそれぞれの値が自動的に継承されます。何もする必要はありません。素晴らしい!

一方、そのモデルのコレクションがあるとしましょう。

new Backbone.Collection([models], [options])

わかりました、いくつかの初期モデルといくつかのオプションを渡すことができます。しかし、初期モデルも渡さなければならないオプションもないので、続けましょう。サーバーからモデルを取得します。

collection.fetch([options])

オプションはありませんが、フェッチされたときに各モデルに追加するいくつかの属性を渡したいと思います。それらをオプションとして渡し、モデルの初期化で属性ハッシュに追加することでこれを行うことができますが、これは面倒です。

これを行う Backbone.js ネイティブの方法はありますか?

4

1 に答える 1

2

属性をオプションとして渡しfetch、コレクションのparseメソッドをオーバーライドして、渡されたオプション (属性) を応答で拡張できます。

ソリューションは次のようになります。

var Collection = Backbone.Collection.extend({
  url:'someUrl',
  parse:function(resp,options) {
    if (options.attributesToAdd) {
      for (var i=0;i<resp.length;i++)
        _.extend(resp[i],options.attributesToAdd);
    }
    return resp;
  }
});

次に、コレクションを呼び出すときに属性を追加するにfetchは、次のことができます。

var collection = new Collection();

collection.fetch({
  attributesToAdd:{foo:'bar',more:'foobar'}
});

構造に合わせてコードを少し調整する必要があるかもしれませんがJSON、うまくいけば、これで正しい方向に進むことができます。

于 2013-10-01T04:23:11.690 に答える