2012-04-04 14 views
0

テンプレートをモデルに送信します。モデルにはコレクションがあります。テンプレートでコレクションが機能しない

console.log(comments); 
console.log(_.size(comments)); 
console.log(comments instanceof App.Collections.Comments); 
console.log(_.pluck(comments, 'created')); 
_.each(comments, function(com) { 
    console.log(com); 
}); 

最初の3点の作品が、最後の2アンダースコアの機能がない:テンプレートでは、私はいくつかの変数や関数をエコー。抜き取ると3倍が定義されず、それぞれ反復されません。

Object { length=3, models=[3], _byId={...}, more...} 
3 
true 
[undefined, undefined, undefined] 

アンダースコア機能を動作させるにはどうすればよいですか?あなたが呼ぶchould

_.pluck(comments, 'created') 

:ので、代わりの

http://documentcloud.github.com/backbone/#Collection-pluck

を:

答えて

1

バックボーンコレクションhave some Underscore methods mixed inコレクションのインスタンスに直接下線のメソッドを使用することができます。

console.log(comments.pluck('created')); 
comments.each(function(com) { console.log(com) }); 

デモ:http://jsfiddle.net/ambiguous/3jRNX/

この1:

_.size = function(obj) { 
    return _.toArray(obj).length; 
}; 
_.sizeはこのようになりますので

console.log(_.size(comments)); 

があなたのために正常に動作します

_.toArrayを呼び出します彼は、コレクションのtoArray

// Safely convert anything iterable into a real, live array. 
_.toArray = function(iterable) { 
    if (!iterable)    return []; 
    if (iterable.toArray)   return iterable.toArray(); 
    if (_.isArray(iterable))  return slice.call(iterable); 
    if (_.isArguments(iterable)) return slice.call(iterable); 
    return _.values(iterable); 
}; 

あなたに正しい長さを与えるために、コレクションのデータをアンラップ。上記は1.3.1ソースから取得したもので、current Github master version_.sizeの実装が異なりますので、アップグレード中に_.sizeコールが中断する可能性があります。

+0

保存した私の一日! Thnx! – GijsjanB

1

あなたは、コレクションクラスがそれをサポートしているとして、コレクションに摘む直接呼び出すことになるでしょう

comments.pluck('created'); 
+0

あなたはどちらも正しいです。ありがとう。申し訳ありませんが、私は1つしか受け入れられません。 – GijsjanB

+0

問題はありません。私たちが手伝ってくれてうれしいです! – alexwen

関連する問題