Ember - registerHelper else条件总是呈现两次

时间:2014-08-07 16:24:23

标签: ember.js handlebars.js

我正在尝试创建一个用于Ember项目的把手块助手。部分工作给出了我期望的if / else结果。但是,除了所有情况下的所需输出之外,模板中else块的内容还会呈现两次。

这是助手

Ember.Handlebars.registerHelper 'ifIn', (a, b, options) ->
  Ember.Handlebars.bind.call options.contexts[0], a, options, true, (item) =>
    Ember.Handlebars.bind.call options.contexts[0], b, options, true, (list) =>
      if item in list
        options.fn()
      else
        options.inverse()  

这是一个演示问题的JS Bin。 ---> JS Bin

1 个答案:

答案 0 :(得分:0)

在摆弄了你的jsbin之后,我得出的结论是,你试图处理这个助手的方式有点奇怪。

  • 确实不需要对options.context对象进行多次绑定调用。您只需要在类(options.context[0].get('notFoundColor'))中获取comparator属性,并将其与列表(options.context[0].get('colors'))中的项进行比较。

  • 为什么不在助手中使用字符串,让您的生活更轻松?例如;帮助者只会将A与B.list进行比较,而不必深入计算属性。但如果这是一个要求,只需使用第一个项目符号中的选项即可。

  • 提供给助手的参数a,b只是字符串。您必须在帮助程序中编写有关如何处理这些逻辑的逻辑。

我建议在这种情况下没有帮助者做太多。为要评估的属性传递一个字符串,并获取要用作比较器的属性,并使用帮助程序执行您想要执行的逻辑。