尝试学习Ember JS,我是一个完全的初学者。
我有一个Ember JS应用程序,其中模型具有布尔值。当我在Handlebars中显示这个值时,我会这样做:
{{#if user.active}}Yes{{else}}No{{/if}}
我不确定这是否是正确的方法?我应该创建帮手吗?还有其他一些“最佳实践”方式吗?
该模型如下所示:
import DS from 'ember-data';
export default DS.Model.extend({
id: DS.attr('integer'),
name: DS.attr('string'),
email: DS.attr('string'),
location: DS.attr('string'),
active: DS.attr('boolean'),
administrator: DS.attr('boolean')
});
我很感谢能得到的所有指示:)
答案 0 :(得分:2)
更短的替代方法是使用if
助手的内联版本,如下所示:
{{if user.active 'Yes' 'No'}}
让我们参考Writing Helpers官方文档来实现帮助。
您可以在终端中运行ember generate helper is-user-active
开始使用。将is-user-active
替换为您想要的名称。
然后,打开app/helpers/is-user-active.js
并将代码更改为:
import Ember from 'ember';
export function isUserActive([user]) {
return user.get('active') ? 'Yes' : 'No';
}
export default Ember.Helper.helper(isUserActive);
保存后,您可以像这样开始使用此助手:{{is-user-active user}}
。
[编辑:本地化]
要使用ember-i18n
支持本地化(请参阅评论),我们需要使用插件提供的i18n service。为了使用它,我们需要更改我们的帮助程序以使用Class-based helper syntax:
import Ember from 'ember';
export default Ember.Helper.extend({
i18n: Ember.inject.service(),
compute([user], hash) {
let isUserActive = user.get('active');
if (isUserActive) {
return this.get('i18n').t('user.active');
} else {
return this.get('i18n').t('user.notActive');
}
}
});
user.active
和user.notActive
组成了密钥,您需要替换自己的密钥。如果需要,i18n
服务文档有一个传递数据以进行插值的示例。
答案 1 :(得分:0)
帮手将是一个简单而干净的解决方案
// Helper
Handlebars.registerHelper("printBool", function(b) {
if (b) {
return "Yes";
} else {
return "No";
}
});
// Usage
{{printBool user.active}}