【问题标题】:How to create template helper如何创建模板助手
【发布时间】:2016-09-23 19:36:21
【问题描述】:

我想创建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 没有定义。

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

【问题讨论】:

  • 你在使用 ember-cli 吗?
  • @wallop 我没有使用 ember-cli
  • 您使用的是哪个版本的 Ember?
  • @locks,余烬 1.12

标签: ember.js handlebars.js helper discourse


【解决方案1】:

看起来你正在使用 ember-cli,如果是这样,请检查 ember-cli 指南中的生成器

ember g 助手是相等的

将导致 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}}

【讨论】:

    【解决方案2】:

    问题出在边界上。这段代码对我有用:

    import { registerHelper } from 'discourse/lib/helpers';
    
    var makeBoundHelper = Ember.HTMLBars.makeBoundHelper;
    
    registerHelper('eq', makeBoundHelper(function(params) {
      return params[0] === params[1];
    }));
    

    解决方案取自here

    【讨论】:

      猜你喜欢
      • 2014-07-23
      • 2013-04-25
      • 2015-09-26
      • 1970-01-01
      • 2020-07-23
      • 2014-11-27
      • 2013-02-18
      • 1970-01-01
      • 2015-01-06
      相关资源
      最近更新 更多