1

バックボーンコレクションオブジェクトを反復処理し、その属性の1つを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

このオブジェクトを繰り返し処理し、テンプレートに各名前を出力して出力するにはどうすればよいですか?

4

2 に答える 2

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 に答える
0

コレクションが次のようになっているとします

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

コレクションの最初のモデルの名前をで取得することはできません

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

その理由は、バックボーンモデルでは属性を直接操作できないためです。彼らはセッターとゲッターを持っています。

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 に答える