如何创建模板助手

时间:2016-09-23 19:36:21

标签: ember.js handlebars.js helper discourse

我想创建eq帮助器。它已经存在于ember-truth-helpers插件中,但我只需要eq帮助器,所以我决定自己在我的插件中创建它。

我在插件中创建了文件assets/javascripts/discourse/helpers/eq.js.es6,内容如下:

import { registerHelper } from 'discourse/lib/helpers';

registerHelper('eq', function(params) {
  return params[0] === params[1];
});

并以这种方式在模板中使用它:

{{#if (eq param1 param2)}} <h1>hello</h1> {{/if}}

eq未定义。

创建助手的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

看起来你正在使用ember-cli,如果在ember-cli指南中通过生成器那么好看

  

ember g helper is-equal

将导致app / helpers / is-equal.js最初为

import Ember from 'ember';

export function isEqual(params/*, hash*/) {
  return params;
}

export default Ember.Helper.helper(isEqual);

但您可以将其更改为

export function isEqual([leftSide, rightSide, isCaseInsensitive]) {
  let ret;
  if (isCaseInsensitive) {
    ret = (leftSide.toLowerCase() === rightSide.toLowerCase());
  } else {
    ret = (leftSide === rightSide);
  }
  return ret;
}

export default Ember.Helper.helper(isEqual);

现在您可以在模板中使用它

{{#if (is-equal 'abc' 'ABC' true)}}

{{/if}}

答案 1 :(得分:0)

问题在于边界。这段代码适合我:

import { registerHelper } from 'discourse/lib/helpers';

var makeBoundHelper = Ember.HTMLBars.makeBoundHelper;

registerHelper('eq', makeBoundHelper(function(params) {
  return params[0] === params[1];
}));

解决方案取自here