1

我正在尝试遍历骨干集合对象并将其中一个属性打印到 haml-coffee 模板 (.hamlc) 上的未链接列表中。

在上下文中,我有一组字体。我想将每种字体的名称打印到模板上。

这是想象代码的样子:

%ul
  - for font in @fonts
    %li
      = font.name

但是,这根本不会迭代。我可以在这个 for 循环中输入任何输入,但它根本不执行。

这是@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

如何迭代此对象并输出和打印模板中的每个名称?

4

2 回答 2

0

假设您的收藏看起来像这样

var fonts = new Backbone.Collection;
fonts.add([
    { name: 'arial'},
    { name: 'arial black'},
    { name: 'comic sans ms'}]);

你不能只用

font = fonts.first()
font.name               // <--- undefined

原因是因为 Backbone 模型不允许您直接操作属性。他们有setter和getter。

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/

于 2012-12-07T18:14:04.907 回答
0

看来您应该指定要显示的 @fonts 集合的哪个属性,如下所示:

%ul
 - for font in @fonts.name
   %li
     = font

如果您想迭代您使用的对象或集合:

- for name, location of @fonts
  = name + "lives in" + location

(例如,如果您的字体对象具有名称和位置属性)

在您的代码中,只需将 'in' 替换为 'of' 。

于 2012-12-07T14:32:32.253 回答