2013-02-23 71 views
21

我想使用車把#each和一個不是數組的對象。流星和車把#每次迭代對象

我該怎麼做?我需要它仍然與流星的#each的特殊功能。

我的目標是在形式:

{ 
    john: "hello", 
    bob: "hi there" 
} 

我想要得到這樣的輸出:

<div>hello</div> 
<div>hi there</div> 
+0

你可以發佈你用作對象嗎?如果你想獲得一個迭代過的對象的屬性,這可能是不可能的,但你總是可以使用'{{item.property}}' – Akshat 2013-02-23 00:18:02

+0

@Akshat發佈我的對象。謝謝你的幫助。 – Harry 2013-02-23 00:47:37

+3

**現在有**的內置支持;請參閱http://stackoverflow.com/q/11884960/50079 – Jon 2013-07-07 22:04:38

回答

37

你需要使用一個輔助你的js來幫助理解車把你的對象:

添加到您的客戶端的js

Template.registerHelper('arrayify',function(obj){ 
    var result = []; 
    for (var key in obj) result.push({name:key,value:obj[key]}); 
    return result; 
}); 

和使用(你也可以使用該密鑰與{{name}})在您的HTML:

{{#each arrayify myobject}} 
    <div title="hover here {{name}}">{{value}}</div> 
{{/each}} 

myobject來自您的模板:

Template.templatename.helpers({ 
    myobject : function() { 
     return { john:"hello", bob: "hi there" } 
    } 
}); 
+0

與使用流星模板進行處理的手柄助手做任何優點? – Harry 2013-02-23 01:46:51

+1

助手只需要在所有模板中聲明一次,模板助手只能用於一個模板,因此每次都必須重新聲明它。如果您決定在更多模板中使用該對象,則使用它 – Akshat 2013-02-23 01:48:58

+0

API已更改,請使用'Template.registerHelper()'而不是'Handlebars.registerHelper()'http://docs.meteor.com/#/full/template_registerhelper – 2015-10-15 20:22:13

8

您可以將對象轉換成數組下劃線_.map

HTML:

<template name="test"> 
    {{#each person}} 
     <div>{{greeting}}</div> 
    {{/each}} 
</template> 

個JS:

Template.test.helpers({ 
    person : function() { 
     return _.map(object, function(val,key){return {name: key, greeting: val}}); 
    } 
}); 
4

應該注意的人現在發現這一點,申報流星把手助手寫這篇文章的正確方法是用UI.registerHelper方法,而不是Handlebars.registerHelper。所以上面的幫手應該看起來像這樣:

UI.registerHelper("arrayify", function(obj){ 
    result = []; 
    for (var key in obj){ 
     result.push({name:key,value:obj[key]}); 
    } 
    return result; 
}); 
+4

現在它是'Template.registerHelper()'http://docs.meteor.com/#/full/template_registerhelper – 2015-10-15 20:20:13