#each
配列ではないオブジェクトでハンドルバーを使用したい。
それ、どうやったら出来るの?で流星の特別な機能を引き続き使用するには、それが必要です#each
。
私のオブジェクトは次の形式です。
{
john: "hello",
bob: "hi there"
}
私は次のような出力を取得しようとしています:
<div>hello</div>
<div>hi there</div>
#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;
});
{{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" }
}
});
アンダースコア_.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;
});