2015-03-30 53 views
0

我正在尝试为Handlebars/Ember应用程序创建一个自定义的“if_eq”助手。该帮助器使用以下语法调用:{{#if_eq item.name'bob'}},但接收2个字符串值进行比较(字面意思是'item.name'和'bob'),而不是“item .name“在它被调用的上下文中。想知道我可能会做错什么。谢谢!扶手助手没有获得变量值

相关的代码段列在下面,并且还创建了一个jsbin来说明问题here

助手代码

Handlebars.registerHelper('if_eq', function(a, b, opts) { 
    console.log("Comparing ", a, b); 
    if(a == b) 
     return opts.fn(this); 
    else 
     return opts.inverse(this); 
}); 

模板代码

<ul> 
    {{#each item in model}} 
     {{#if_eq item.name 'bob'}} 
      <li>We have a bob here!</option> 
     {{else}} 
      <li>A non-bob</li> 
     {{/if_eq}} 
    {{/each}} 
</ul> 

回答

2

把手助手别玩绑定的属性不错。

通常你会想要在你的模板中避免这种逻辑。具体来说,要么在你的控制器上创建一个方法,要么在对象本身上创建一个方法,这样你可以这样说:if item.isBob

E.g. http://emberjs.jsbin.com/fudadugemu/2/edit?html,js,output

或者你可以使用一个组件,有一点它的乐趣,这样的事情:

http://emberjs.jsbin.com/buyeqenumo/2/edit

(尝试改变鲍勃输入)

+1

嘿科里,感谢您的答复。失望地听到助手不能使用绑定的属性......几乎使他们无用。可以使用未绑定的属性吗?认为我有些误导的手把助手库,如:https://github.com/danharper/Handlebars-Helpers,但他们遭受同样的问题,似乎 – MackelRow 2015-03-31 17:39:45

+0

当我说“不玩好, “我的意思是你可以做到这一点,它只是需要跳过篮球。如果你真的有心做它:http://emberjs.com/api/classes/Ember.Handlebars.html#toc_example-with-multiple-bound-properties – 2015-04-01 08:34:51