Handlebars使用if / else将Context切换到上下文的属性

时间:2014-09-17 20:00:16

标签: ember.js handlebars.js

只是想知道处理以下情况的最佳方法是什么。

使用: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个字段。 “人”和“动物”对象都有相同的键,在这种情况下,最好减少所需的把手,以便将上下文切换到其中一个内键。

1 个答案:

答案 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}}