Перебор объекта в базовом шаблоне coffee-haml?
Я пытаюсь перебрать объект коллекции магистрали и вывести один из его атрибутов в несвязанный список на шаблоне haml-coffee (.hamlc).
В контексте у меня есть коллекция шрифтов. Я хочу напечатать название каждого шрифта на шаблоне.
Вот как будет выглядеть код:
%ul
- for font in @fonts
%li
= font.name
Однако это не повторяется вообще. Я могу поместить любой вход в это для цикла, и он просто не выполняется.
Вот как выглядит @fonts при выводе в console.log
Object {0: Object, 1: Object, 2: Object, 3: Object, 4: Object…}
0: Object
_id: "50bed321dbc554c7a0000005"
data: Object
name: "Actor"
user_ids: Array[0]
__proto__: Object
1: Object
2: Object
3: Object
Как мне перебрать этот объект, вывести и напечатать каждое имя в шаблоне?
2 ответа
Кажется, вы должны указать, какой атрибут коллекции @fonts вы собираетесь отобразить так:
%ul
- for font in @fonts.name
%li
= font
Если вы хотите перебрать объект или коллекцию, которую вы используете:
- for name, location of @fonts
= name + "lives in" + location
(например, если у вашего объекта шрифтов есть свойства name и location)
В вашем коде просто замените "в" на "из".
Предположим, что ваша коллекция выглядит так
var fonts = new Backbone.Collection;
fonts.add([
{ name: 'arial'},
{ name: 'arial black'},
{ name: 'comic sans ms'}]);
Вы не можете просто получить название первой модели в вашей коллекции с
font = fonts.first()
font.name // <--- undefined
Причина в том, что модели Backbone не позволяют вам напрямую управлять атрибутами. У них есть сеттеры и геттеры.
font.get 'name' // 'arial'
Но вернемся к сути, с вашим шаблоном все в порядке, и вам нужно только передать ему JSON-представление коллекции
var html = window.HAML.test({fonts:fonts.toJSON()});
document.getElementById('out').innerHTML = html;
Если по какой-либо причине вы не хотите передавать его в JSON-представление, вы можете передать ему массив моделей. {fonts: fonts.models}
но тогда вам придется изменить свой шаблон и получить что-то вроде %li = font.get 'name'
Вот jsfiddle (первая часть - это код, созданный coffee-haml) http://jsfiddle.net/jaimem/qRMqu/2/