是否有可能将条件或其他javascript作为参数传递给ember把手?

时间:2013-12-02 14:02:13

标签: javascript ember.js handlebars.js

我想将真/假声明传递给我的把手

{{Gd-text-input label="Specify" name="Specify" key="entry.810220554" hideIf="entry.18110 === "Client""}}

如果变量entry.18110设置为“Client

,我希望hideIf为true

2 个答案:

答案 0 :(得分:1)

首先,将其添加到某处 -

Handlebars.registerHelper('ifEqual', function (var1, var2, options) {
    if (var1=== var2) {
        return new Handlebars.SafeString(options.fn(this));
    }
    return new Handlebars.SafeString(options.inverse(this));
});

然后..

{{#ifEqual entry.18110 "Client"}}
{{Gd-text-input label="Specify" name="Specify" key="entry.810220554" hideIf="true"}}
{{else}}
{{Gd-text-input label="Specify" name="Specify" key="entry.810220554" hideIf="false"}}
{{/if}}

这几乎是唯一的方法,因为车把团队特别将大部分逻辑排除在模板之外,因为它通常不属于那里。这是有争议的,因为有时它会使事情变得更复杂,不允许简单的逻辑。但是,这是非常可行的。

答案 1 :(得分:1)

另一个答案对于Ember Handlebars不起作用,对于你的情况,你可以做这样的事情。

http://emberjs.jsbin.com/agewuxAT/3/edit

组件

App.HideableCompComponent = Em.Component.extend({
  isHidden: function(){
    var prop = this.get('hideIfProperty');
    if(!prop) return false;
    // allow lazy comparison? up to you
    return this.get('content').get(prop) == this.get('hideIfValue');
  }.property('hideIfProperty', 'hideIfValue')
});

模板

<script type="text/x-handlebars" data-template-name="components/hideable-comp">
  {{#unless isHidden}}
    I am a component I am not hidden!
  {{else}}
    I am hidden
  {{/unless}}
</script>

用法

{{hideable-comp content=model hideIfProperty='length' hideIfValue=3}}