在 Blaze 模板中访问对象的 属性 个名称
Access an object's property names in a Blaze template
假设我有一个这样的助手:
Template.profile.helpers({
info: {
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
}
});
我想将此信息放入 <ul>
。这是一些伪代码:
<template name="profile>
<ul>
{{#each}}
<li> {{key}}: {{property}} </li>
{{/each}}
</ul>
</template>
如果这是微不足道的,请原谅我,我是 Meteor 和 Blaze 的新手,我一直无法在线找到解决方案。
这会有所帮助:
http://meteorcapture.com/spacebars/
您想使用 {{#with}}
.
<template name="profile">
<ul>
{{#with info}}
<li>{{Name}}</li>
<li>{{Age}}</li>
<li>{{Location}}</li>
{{/with}}
</ul>
</template>
虽然您的助手代码是正确的:
Template.profile.helpers({
info: {
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
}
});
我个人喜欢养成将助手名称映射到 returns 某物的函数的习惯。
Template.profile.helpers({
info: function(){
return {
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
};
}
});
编辑
Template.content.helpers({
info: function(){
var obj = {
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
};
var arrayOfObjects = [];
// creating an array of objects
for (key in obj){
arrayOfObjects.push({key: key, value: obj[key]});
};
console.log("This is the array of objects: ", arrayOfObjects);
return arrayOfObjects;
},
});
HTML:
{{#each info}}
{{value}}
{{/each}}
如果你想按照你的要求遍历一个对象的属性和值,你可以通过以下方式通用:
Template.content.onCreated(function() {
this.properties = new ReactiveVar({
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
});
});
Template.content.helpers({
keys: function () {
return Object.keys(Template.instance().properties.get());
},
key_value_pair: function() {
return { key: this, value: Template.instance().properties.get()[this] };
}
});
并使用此模板
<body>
<h1>Property Loop</h1>
<ul>
{{> content}}
</ul>
</body>
<template name="content">
{{#each keys}}
{{> property key_value_pair }}
{{/each}}
</template>
<template name="property">
<li>{{key}}: {{value}}</li>
</template>
我为您准备了这个 MeteorPad,这是一个 运行 示例:
http://meteorpad.com/pad/24MGwbuMNCcXCC7EW/PropertyLoop
干杯,
汤姆
P.S.: 如果对象的值永远不会改变,则没有必要将对象创建为 ReactiveVar。但是通过将其作为 ReactiveVar 来执行,当对象内容发生变化时,表单也会被重新更新。
假设我有一个这样的助手:
Template.profile.helpers({
info: {
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
}
});
我想将此信息放入 <ul>
。这是一些伪代码:
<template name="profile>
<ul>
{{#each}}
<li> {{key}}: {{property}} </li>
{{/each}}
</ul>
</template>
如果这是微不足道的,请原谅我,我是 Meteor 和 Blaze 的新手,我一直无法在线找到解决方案。
这会有所帮助:
http://meteorcapture.com/spacebars/
您想使用 {{#with}}
.
<template name="profile">
<ul>
{{#with info}}
<li>{{Name}}</li>
<li>{{Age}}</li>
<li>{{Location}}</li>
{{/with}}
</ul>
</template>
虽然您的助手代码是正确的:
Template.profile.helpers({
info: {
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
}
});
我个人喜欢养成将助手名称映射到 returns 某物的函数的习惯。
Template.profile.helpers({
info: function(){
return {
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
};
}
});
编辑
Template.content.helpers({
info: function(){
var obj = {
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
};
var arrayOfObjects = [];
// creating an array of objects
for (key in obj){
arrayOfObjects.push({key: key, value: obj[key]});
};
console.log("This is the array of objects: ", arrayOfObjects);
return arrayOfObjects;
},
});
HTML:
{{#each info}}
{{value}}
{{/each}}
如果你想按照你的要求遍历一个对象的属性和值,你可以通过以下方式通用:
Template.content.onCreated(function() {
this.properties = new ReactiveVar({
Name: 'Bob Dinkleberg',
Age: 45,
Location: 'Earth, Milky Way'
});
});
Template.content.helpers({
keys: function () {
return Object.keys(Template.instance().properties.get());
},
key_value_pair: function() {
return { key: this, value: Template.instance().properties.get()[this] };
}
});
并使用此模板
<body>
<h1>Property Loop</h1>
<ul>
{{> content}}
</ul>
</body>
<template name="content">
{{#each keys}}
{{> property key_value_pair }}
{{/each}}
</template>
<template name="property">
<li>{{key}}: {{value}}</li>
</template>
我为您准备了这个 MeteorPad,这是一个 运行 示例:
http://meteorpad.com/pad/24MGwbuMNCcXCC7EW/PropertyLoop
干杯, 汤姆
P.S.: 如果对象的值永远不会改变,则没有必要将对象创建为 ReactiveVar。但是通过将其作为 ReactiveVar 来执行,当对象内容发生变化时,表单也会被重新更新。