配列ではないオブジェクトでハンドルバー#each
を使用したい。
それ、どうやったら出来るの? #each
を使用して流星の特別な機能を引き続き使用するために必要です。
私のオブジェクトは次の形式です:
{
john: "hello",
bob: "hi there"
}
私はこのような出力を取得しようとしています:
<div>hello</div>
<div>hi there</div>
ハンドルバーがオブジェクトを理解できるようにするには、jsでヘルパーを使用する必要があります。
クライアントjsに追加
Template.registerHelper('arrayify',function(obj){
var result = [];
for (var key in obj) result.Push({name:key,value:obj[key]});
return result;
});
そして、htmlで({{name}}
でキーを使用することもできます)を使用します。
{{#each arrayify myobject}}
<div title="hover here {{name}}">{{value}}</div>
{{/each}}
myobject
はテンプレートに由来します:
Template.templatename.helpers({
myobject : function() {
return { john:"hello", bob: "hi there" }
}
});
アンダースコア_.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}});
}
});
この記事を書いている現在、MeteorでHandlebarsヘルパーを宣言する正しい方法は、Handlebars.registerHelperではなくUI.registerHelperメソッドを使用しているため、これを見つけた人は注意してください。したがって、上記のヘルパーは次のようになります。
UI.registerHelper("arrayify", function(obj){
result = [];
for (var key in obj){
result.Push({name:key,value:obj[key]});
}
return result;
});