在自定义把手助手中访问Ember.Mixin

时间:2014-04-23 16:29:57

标签: ember.js handlebars.js

在自定义手柄助手中使用Ember.Mixin对象中定义的方法是否有优雅的方式?

例如,在我的情况下,我有一个mixin,App.Format,其中包含一系列格式化数字,日期等的不同方法,我想通过自定义助手直接从模板中访问这些方法中的一些(例如{{formatNumber 450324}})。我之所以不直接将方法实现直接放在helper而不是mixin中是因为我还需要这些方法在控制器,视图等中可用。为了保持我的代码DRY,我绝对不希望在mixin和帮助器中有重复的代码。

是否有任何规范的,“无趣的”方式来实现这一点,或者我只是以完全错误的方式完全考虑它?

编辑:这是一个更好地说明问题的jsbin:

http://emberjs.jsbin.com/wunug/1/edit?html,js,output(见第33-37行)

2 个答案:

答案 0 :(得分:4)

方法Mixin.apply完成了这项工作。

Ember.Handlebars.helper('formatNumber', function(num, decimals) {
  var format = App.Format.apply({});
  return format.formatNumber(num, decimals || 2);
});

答案 1 :(得分:0)

我正在使用Ember 2.12,这就是我为我工作的。希望这有助于某人。

创建一个名为formatter的新mixin:

../混入/ formatters.js

    import Ember from 'ember';

    export default Ember.Mixin.create({
        shortDate: function(date) {
            return `Date should be formatted: ${date}`;
        }
    });

创建一个新的帮助程序,导入上面的mixin并使用它。

../助手/短date.js

    import Ember from 'ember';
    import FormatDateMixin from '../mixins/formatters';

    export default Ember.Helper.extend(FormatDateMixin,  {
      compute: function(params /*, hash*/) {
        return this.shortDate(params);
      }
    });

在模板* .hbs文件中,使用如下的帮助程序:

    {{short-date today}}