只是想知道处理以下情况的最佳方法是什么。
使用:Ember 1.7.0,Handlebars 1.3.0
上下文:
var context = {
isPerson : true,
person : {
name : 'joe'
},
animal : {
name : 'henry'
}
};
HBS:
{{#if isPerson}}
{{#with person}}
{{else}}
{{#with animal}}
{{/if}}
{{name}}
{{/with}}
上下文是一个虚拟上下文,真正的上下文是一个包含许多属性的大型数据集。我想要实现的是减少实现这一目标所需的把手数量。我知道我可以简单地做以下事情......
{{#if isPerson}}
{{#with person}}
{{name}}
{{/with}}
{{else}}
{{#with animal}}
{{name}}
{{/with}}
{{/if}}
这里的问题是我将渲染大约100个字段。 “人”和“动物”对象都有相同的键,在这种情况下,最好减少所需的把手,以便将上下文切换到其中一个内键。
答案 0 :(得分:1)
在我看来,最好的方法是使用一个计算属性,该属性可以解析为人或动物对象。为了示例,我们称之为creature
。
creature: function() {
if (this.get('context.isPerson')) {
return this.get('context.person');
} else {
return this.get('context.animal');
}
}.property('context.isPerson')
然后在您的模板中,只需使用creature
属性:
{{#with creature}}
{{name}}
{{/with}}