18

pluck メソッドを使用して、バックボーン コレクション内の各モデルの属性の配列を取得できることを理解しています

var idsInCollection = collection.pluck('id'); // outputs ["id1","id2"...]

コレクション内の各モデルに属性を設定するメソッドがあればしたいのですが、

var urlArray = ["https://url1", "https://url1" ...];
collection.WHAT_IS_THIS_METHOD({"urls": urlArray});
4

5 に答える 5

39

正確には既存のメソッドはありませんが、invoke同様のことを 1 行で実行してみましょう。

collection.invoke('set', {"urls": urlArray});

すべてのコレクションで再利用可能な set メソッドを作成する場合は、次のようにします。

var YourCollection = Backbone.Collection.extend({
    set: function(attributes) {
        this.invoke('set', attributes);
        // NOTE: This would need to get a little more complex to support the
        //       set(key, value) syntax
    }
});

* 編集 *

Backbone はそれ以来、独自のsetメソッドを追加しており、それを上書きすると、完全に壊れてしまいますCollection。したがって、上記の例は実際にはsetModelAttributes、またはそうでないものに名前を変更する必要がありsetます。

于 2012-12-14T22:30:37.647 に答える
9

そのための方法はありませんが、試すことができます:

collection.forEach(function(model, index) {
    model.set(url, urlArray[index]);
});
于 2012-12-14T22:29:48.653 に答える
0

David の回答を拡張すると、この機能をコレクションのカスタム メソッドに簡単に組み込むことができます。これが私のコーヒースクリプトを使った方法です:

class Collection extends Backbone.Collection
  setAll: () ->
    _args = arguments
    @models.forEach (model) -> model.set _args...

class SomeCollection extends Collection
  url: '/some-endpoint.json'

myLovelyCollection = new SomeCollection()
myLovelyCollection.fetch
  success: (collection, response) ->
    collection.setAll someVar: true
    collection.setAll anotherVar, 'test'

バニラ JS で実行したい場合は、まったく同じですが、クラスやスプラットの力を利用していません。より多くのように:

var Collection = Backbone.Collection.extend({
  setAll: function () {
    var _args = arguments;
    this.models.forEach(function (model) {
      model.set.apply(model, _args);
    });
  }
});
于 2015-12-01T16:55:20.363 に答える
-3

アンダースコア サイトに従って呼び出し構文を使用している場合は、_.invoke(list, methodName, *arguments) http://underscorejs.org/#invokeにする必要があります。

したがって、 machineghostによって言及された上記の関数は、

collection.invoke({'url': someURL},'set');

それが役立つことを願っています:)

于 2014-02-12T20:28:16.743 に答える