Ember.js 如何将#if-type车把助手从ember 1.7翻译为ember cli(2.3)

Ember.js 如何将#if-type车把助手从ember 1.7翻译为ember cli(2.3),ember.js,ember-cli,Ember.js,Ember Cli,我有这个注册车把助手在1.7现在 var get = Ember.Handlebars.get; Ember.Handlebars.registerHelper('ifCond', function(val1, val2, options) { var context = (options.fn.contexts && options.fn.contexts[0]) || this; var val1 = get(context, val1, options.fn

我有这个注册车把助手在1.7现在

var get = Ember.Handlebars.get;
Ember.Handlebars.registerHelper('ifCond', function(val1, val2, options) {
    var context = (options.fn.contexts && options.fn.contexts[0]) || this;
    var val1 = get(context, val1, options.fn);
    if (val1 == val2) {
        return options.fn(this);
    } else {
        return options.inverse(this);
    }
});
其思想非常简单:将第一个参数作为上下文属性,将第二个参数作为实际值,并根据它们的相等性返回布尔值。例如,如果我有一个对象用户的属性年龄

{{#ifCond user.age "22" }}
  <h2> Twin Twos!</h2>
{{/ifCond}}
但是,为了使其工作,我必须(在模板中)编写


是否还有一种方法可以像我们在ember 1.7中所做的那样实际使用把手辅助工具

经过一段时间的挖掘,似乎问题编辑是最好的前进方式。从现在起,这似乎是把手助手们公认的方式

要创建辅助对象,请模拟:

import Ember from 'ember';

export function ifCond(params/*, hash*/) {
    return (params[0] === params[1]);
  // return params;
}

export default Ember.Helper.helper(ifCond);
然后,以这种格式将其包含在模板中

{{#if (ifCond 1 1)}}
  yep
{{/if}}
这个链接为我指明了正确的方向:

这一次向我展示了可以做的事情: 首先有:

旧车把辅助对象将被删除以支持Ember.Helper 应用程序编程接口。此API不为帮助人员提供采取行动的机制 块,但引入了对可使用的嵌套帮助程序的支持 与内置帮助程序(如{{{if}}和{{{{each}})配合使用 达到同样的目的

建议像您在示例中那样使用帮助程序(
{{{#if(ifCond 1 1)}}
)。如果你决定走这条路,我建议你使用插件。使用它,您可以扔掉自己的助手,然后像这样使用它:

{{#if (eq user.age "22") }}
  <h2> Twin Twos!</h2>
{{/if}}
{{#if(eq user.age“22”)}
双胞胎2!
{{/if}
我发现真相助手非常灵活和容易理解,并建议使用它们


或者,如果你想模拟你的旧助手,你需要使用一个组件,我必须说明你可以如何做到这一点。

因为这不是一个直接的答案,所以将其作为一个注释发布,但我建议你看一下。非常有用且可靠的插件。在进一步研究之后,如果您不想带来额外的依赖性,那么编辑后的答案是最好的解决方法。非常感谢您的关注。从我自己的调查来看,这似乎是。。。公认的“佳能”把手助手的演变。我会把它更新为正确答案。啊。有趣。灰烬真相助手肯定有帮助,但这个答案也提供了一个额外的组件如何可以用来返回一个值。
{{#if (ifCond 1 1)}}
  yep
{{/if}}
{{#if (eq user.age "22") }}
  <h2> Twin Twos!</h2>
{{/if}}