在项目中,我有模板输入:
{{#if (communicationPreferenceIs 'Phone')}}
<div class="row">
<div class="col-md-4 form-label">
Phone<i class="required">*</i>
</div>
<div class="col-md-8">
{{input-validation
type="text"
required=true
class="form-control"
value=model.phone
placeholder="Phone"
pattern="[0-9]*"
maxlength="30"
onkeydown=""
key-down="validateInput"
}}
</div>
</div>
{{/if}}
我需要一个条件渲染,并将其 Package 在if构造中。在其中,我使用控制器中的方法communicationPreferenceIs
来检查值。下面是它的代码:
App.EditController = Ember.Controller.extend(Ember.Evented, {
communicationPreferenceIs: function(preference) {
const model = this.get('model');
if (!model.communicationPreference || !model.communicationPreference.name) {
return false;
}
const currentPreference = model.communicationPreference.name;
return currentPreference === preference;
}.property('model.communicationPreference'),
}
所以,在渲染时,我得到一个错误:
"Assertion Failed: A helper named 'communicationPreferenceIs' could not be found"
我尝试了一下,发现这个方法很有效:
communicationPreferencePhone: function() {
const model = this.get('model');
return (
model.communicationPreference &&
model.communicationPreference.name === 'Phone'
);
}.property('model.communicationPreference'),
如果我在mode中使用它:
{{#if communicationPreferencePhone }}
效果很好。如何让communicationPreferenceIs
更通用?
1条答案
按热度按时间rnmwe5a21#
你看过这个页面吗?全局帮助函数
要使用全局可用的helper函数,您需要将它们放置在app/helpers文件夹中。
在经典系统中,你会使用kebab-case来引用helper。
因此,
1.定义
app/helpers/communication-preference-is.js
1.通过
{{communication-preference-is this.model "Phone"}}
调用它,或者作为子表达式通过{{otherFunction (communication-preference-is this.model "Phone")}}
调用它,就像在if语句中发生的那样:语法说明:
{{ }}
用于转义HTML( )
用于子表达式(例如:调用通信首选项){{#
块的开始{{/
块结束空间上:
注意,在ember-source 4.5之前,helper必须 Package 在一个额外的函数
helper
中在email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)之后,你就可以
使用Ember Polaris(3.28+支持),你可以导入helper而不是依赖全局变量:
但是,您可能需要一个
app-name/helpers
文件,您可以从中导入任何内容,而不是每个助手都有一个导入。