在Handlebars

时间:2016-12-30 12:19:00

标签: ember.js handlebars.js

尝试学习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')
});

我很感谢能得到的所有指示:)

2 个答案:

答案 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.activeuser.notActive组成了密钥,您需要替换自己的密钥。如果需要,i18n服务文档有一个传递数据以进行插值的示例。

答案 1 :(得分:0)

帮手将是一个简单而干净的解决方案

// Helper
Handlebars.registerHelper("printBool", function(b) {
  if (b) {
    return "Yes";
  } else {
    return "No";
  }
});

// Usage 
{{printBool user.active}}