【发布时间】:2013-12-18 06:27:51
【问题描述】:
我想向我的车把传递一个真/假语句
{{Gd-text-input label="Specify" name="Specify" key="entry.810220554" hideIf="entry.18110 === "Client""}}
如果变量 entry.18110 设置为“客户端”,我希望 hideIf 为真
【问题讨论】:
标签: javascript ember.js handlebars.js
我想向我的车把传递一个真/假语句
{{Gd-text-input label="Specify" name="Specify" key="entry.810220554" hideIf="entry.18110 === "Client""}}
如果变量 entry.18110 设置为“客户端”,我希望 hideIf 为真
【问题讨论】:
标签: javascript ember.js handlebars.js
首先,在某处添加这个 -
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}}
这几乎是唯一的方法,因为车把团队专门将大部分逻辑排除在模板之外,因为它通常不属于那里。这是有争议的,因为有时不允许简单的逻辑会使事情变得更加复杂。但是,这是非常可行的。
【讨论】:
entry.18110 更改模板没有更新,对吗?因为Handlebars.registerHelper 不会创建绑定助手
另一个答案不适用于 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}}
【讨论】:
['red', 'yellow', 'blue']返回的控制器上的模型@