6

これは非常に簡単な修正であると確信していますが、これまでに見つけた投稿のどれも、これに直接対処していないようです: コレクションをループして各モデルを取得するにはどうすればよいですか?

私が使用しようとしている最初の方法は、アンダースコアの each メソッドです。これが私の呼び出しと機能です:

collection_var.each(paintThings);

ここに私の機能があります:

function paintThings() {
        console.log(this);
        console.log(this.model);
            var thing_type = this.model.get("type"),
                thing_other = this.model.get("otherAttribute");

                console.log(this.model);
                console.log(thing_type);
                console.log(thing_other);
        }

現在、これは未定義として出力され、this.model エラーが発生します。

Uncaught TypeError: Cannot read property 'model' of undefined 

答えは簡単ですが、気が狂いそうです。私はアンダースコアが初めてです。ここで誰か助けてくれませんか?アンダースコア以外の他の方法がより高速で優れている場合は、それも受け入れます。

私もこれを試しました:

 for (var i = 0, l = collection_var.length; i < l; i++) {
            console.log(collection_var[i]);
 }

しかし、それは私が望むものを私に与えていません。

4

5 に答える 5

24

最初の方法:modelsコレクションのプロパティを使用します。

var myModel
for(var i=0; i<myCollection.length; i++) {
  myModel = myCollection.models[i];
}

2番目の方法は、次の方法ですeach

myCollection.each(function(model, index, [context]) {...});
于 2013-04-15T12:18:36.813 に答える
0

アンダースコアマップを使用しました。

docs = Backbone.Collection.extend();

this.subViews = _.map(docs.models, function(doc) {
    return new DocView({ model: doc });
}, this);
于 2014-07-22T16:27:42.460 に答える
0

わかりました、ばかげたエラーです!モデルに触れることができるように、追加のパラメーターを関数に渡す必要がありました。

このような:

function paintThings(thing) {
    //returns model
    console.log(thing);
        var thing_type = thing.get("type"),
            thing_other = thing.get("otherAttribute");

            //These all respond directly
            console.log(thing);
            console.log(thing_type);
            console.log(thing_other);
    }

私はまだすべての回答を確認し、最もエレガントなソリューションを受け入れます!

于 2013-04-15T12:19:23.557 に答える
0

試してみるべきだと思いますcollection_var.models.each(paintThings)。これにより、コレクションのモデルに直接アクセスできるようになります。

于 2013-04-15T12:18:23.937 に答える