2012-04-04 4 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); 
}); 

Первые три работы, но последние два подчеркивания функции не делают. Pluck дает 3x undefined, и каждый из них не выполняет итерацию.

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

Как я могу заставить функции подчеркивания работать?

ответ

1

Магистральные коллекции have some Underscore methods mixed in, поэтому вы можно использовать методы подчеркивания непосредственно на экземпляре коллекции:

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

Демо: http://jsfiddle.net/ambiguous/3jRNX/

Это один:

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

отлично работает для вас, потому что _.size выглядит следующим образом:

_.size = function(obj) { 
    return _.toArray(obj).length; 
}; 

и _.toArray называет t он коллекции 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

Вы хотите позвонить срывать непосредственно на коллекции, так как класс Collection поддерживает его:

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

Таким образом, вместо:

_.pluck(comments, 'created') 

Вы chould звоните:

comments.pluck('created'); 
+0

Вы оба правы. Благодарю. Извините, я могу принять только один. – GijsjanB

+0

Без проблем, рад, что мы сможем помочь! – alexwen