我正在尝试创建一个用于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
答案 0 :(得分:0)
在摆弄了你的jsbin之后,我得出的结论是,你试图处理这个助手的方式有点奇怪。
确实不需要对options.context对象进行多次绑定调用。您只需要在类(options.context[0].get('notFoundColor'))
中获取comparator属性,并将其与列表(options.context[0].get('colors'))
中的项进行比较。
为什么不在助手中使用字符串,让您的生活更轻松?例如;帮助者只会将A与B.list进行比较,而不必深入计算属性。但如果这是一个要求,只需使用第一个项目符号中的选项即可。
提供给助手的参数a,b只是字符串。您必须在帮助程序中编写有关如何处理这些逻辑的逻辑。
我建议在这种情况下没有帮助者做太多。为要评估的属性传递一个字符串,并获取要用作比较器的属性,并使用帮助程序执行您想要执行的逻辑。