![](/img/trans.png)
[英]Haml Coffee Assets Template Error, no access to Backbone JS model?
[英]Iteration over object in backbone coffee-haml template?
我試圖遍歷一個骨干收集對象,並將其屬性之一打印到haml咖啡模板(.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
如何遍歷此對象並輸出和打印模板中的每個名稱?
似乎您應該指定將要顯示的@fonts集合的哪個屬性,如下所示:
%ul
- for font in @fonts.name
%li
= font
如果要遍歷對象或集合,請使用:
- for name, location of @fonts
= name + "lives in" + location
(例如,如果您的字體對象具有名稱和位置屬性)
在您的代碼中,只需將'in'替換為'of'即可。
假設您的收藏看起來像這樣
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/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.