Перебор объекта в базовом шаблоне 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/

Другие вопросы по тегам