我正在尝试迭代骨干集合对象并将其中一个属性打印到haml-coffee模板(.hamlc)上的未链接列表中。
在上下文中,我有一组字体。我想在模板上打印每种字体的名称。
这就是想象代码的样子:
%ul
- for font in @fonts
%li
= font.name
但是,这根本不会迭代。我可以在这个for循环中输入任何输入,但它根本不执行。
输出到console.log
时,这就是@fonts的样子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
如何迭代此对象并输出并打印模板中的每个名称?
答案 0 :(得分:0)
您似乎应该指定要显示的@fonts集合的哪个属性:
%ul
- for font in @fonts.name
%li
= font
如果您想迭代对象或集合,请使用:
- for name, location of @fonts
= name + "lives in" + location
(例如,如果您的fonts对象具有名称和位置属性)
在您的代码中,只需将'in'替换为'of'即可。
答案 1 :(得分:0)
假设您的收藏品看起来像这样
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/