如何比较每个值?

时间:2014-08-05 09:45:23

标签: javascript ember.js handlebars.js

我找到了把手https://gist.github.com/doginthehat/1890659的比较助手。 我尝试使用它:

{{#each item in model.records}}
<div>
    {{#compare model.currentUser.id item.poster_id}}
        <div class="author current">{{model.currentUser.name}}</div>
    {{else}}
        <div class="author remote">{{model.remoteUser.name}}</div>
    {{/compare}}
    <div class="td message-text">
        {{item.poster_id}}{{item.text}}
    </div>
</div>
{{/each}}

但它不起作用。因为帮助器不将第二个参数识别为整数值。助手只获取文本'item.poster_id'。此外,我试图通过this.get(rvalue)获得helper值。但它仍然没有奏效。我读了很多关于它的问题,但我找不到解决方案。 请告知如何比较每个区块的值?或许我需要使用另一种方法。

1 个答案:

答案 0 :(得分:5)

要点中存在问题。你需要提取要点中缺少的左值和右值。

        lvalue = Ember.Handlebars.get(this,lvalue, options);
        rvalue = Ember.Handlebars.get(this,rvalue, options);
        var result = operators[operator](lvalue,rvalue);

这是更新的要点。 https://gist.github.com/thecodejack/a8de97f4ec410ea23722

这是工作的jsbin http://emberjs.jsbin.com/dolive/1/edit

更新:btw lvaluervalue更正仅适用于emberjs。

解释:基本上因为您使用的是registerHelper,所以参数作为字符串值传递,而不是将它们解析为变量。因此,当您传递变量var1var2(来自我的jsbin链接)时,它们被视为字符串“var1”和“var2”而非值(1,“1”)。

因此,为了获取它们的值,Ember提供了一个Handlebars.get()方法,它基本上根据提供的上下文字符串获取值。文档链接http://emberjs.com/api/classes/Ember.Handlebars.html#method_get

但是如果你使用registerBoundHelper我们不需要Ember.Handlebars.get(),因为params本身将传递值而不是键字符串。文档链接http://emberjs.com/api/classes/Ember.Handlebars.html#method_registerBoundHelper