如何比较Handlebars.js中一个属性在循环范围之外的循环中的两个属性?

时间:2017-09-19 16:17:09

标签: javascript html handlebars.js

我正在使用Handlebars.js根据字符串是否与当前用户的用户名匹配来显示元素。

我实际上正在遍历集合blogs,这就是属性author发挥作用的地方。无论如何,author.username表示一些用户名字符串,这对我来说是可用的。我的问题是,如果我将user.attributes.username更改为某个预定义的字符串,即“martin”,那么条件会检出并以我想要的方式显示元素。但我也有一个属性user.attributes.username,这在#ifEquals条件之外呈现正常。我真的想比较author.username这个属性,而不是一些预定义的字符串。

如何比较两个属性,例如author.usernameuser.attributes.username而不是author.username"martin"

author.usernameuser.attributes.username都具有相同的值。这对我现在不起作用,但这是我最终想要的:

{{#each blog}}
        {{#ifEquals author.username user.attributes.username}}
            <a href="#" onClick="return false;"><span class="delete-container" style="cursor: pointer" data-blog-id="{{objectId}}"><span class="typcn typcn-arrow-sorted-down hvr-pulse-grow" style="color: gray; font-size: 30px;"></span></span></a>
        {{/ifEquals}}
{{/each}}

这有效但不足以达到我的目的:

{{#each blog}}
        {{#ifEquals author.username "martin"}}
            <a href="#" onClick="return false;"><span class="delete-container" style="cursor: pointer" data-blog-id="{{objectId}}"><span class="typcn typcn-arrow-sorted-down hvr-pulse-grow" style="color: gray; font-size: 30px;"></span></span></a>
        {{/ifEquals}}
{{/each}}

Handlebars.js帮助:

<script>
    Handlebars.registerHelper('ifEquals', function(arg1, arg2, options) {
        return (arg1 == arg2) ? options.fn(this) : options.inverse(this);
    });
</script>

修改:经过进一步检查,问题似乎是user.attributes.username无法在blog循环内呈现。它认为userblog的属性。有没有办法访问user,好像它不在循环范围内?

1 个答案:

答案 0 :(得分:1)

显然,您可以通过附加../

来访问Handlebars.js中的外循环属性

{{currentUser.username}} // Renders fine outside the loop

 {{#each blog}}
    // Append ../ to access currentUser inside the loop
    {{#ifEquals author.username ../currentUser.username}}
        // Show element here
    {{/ifEquals}}
 {{/each}}

../user是来自blog循环之外的属性,而author属于blog