【发布时间】:2018-01-03 02:03:18
【问题描述】:
查看下面的 ../billerId。如果我将 {{ billerId }} 放在 {{# each }} 块之前,我可以看到 billerId 在那里并已定义。
我想在我的自定义助手中使用 billerId 来查看是否应该预先选择选项的值。
<select class="searchbar-control col-6 form-control" id="searchbar-select-biller" style="display:none">
<option value=''>Select a biller...</option>
{{# each billers }}
<option value='{{ _id }}' {{ ifEqual _id ../billerId "selected" "" }} >{{ name }}</option>
{{/ each }}
</select>
这里是帮助代码:
ifEqual: function (obj, value, trueString, falseString) {
return ( (obj===value) ? trueString : falseString );
},
我尝试了各种语法:billerId、../billerId、../../billerId、{{ billerId }}。
运气不好。
【问题讨论】:
-
Handlebars确实支持访问父上下文中的属性。
../billerId应该可以工作。您确定问题出在../billerId上吗?我建议在选项文本中使用它以确保,即,将{{ name }}替换为{{ ../billerId }}- 只是为了调试。 -
在我发布问题之前我就是这么做的。它不起作用。它单独工作,用大括号括起来 - 即 {{ ../billerId }},但在没有大括号的情况下使用时不起作用。帮助器中的参数不包括大括号。
-
见:jsfiddle.net/76484/s17s20vv。它工作得很好。如果您没有得到您期望的结果,我怀疑问题是
obj和value的类型不相等。即,一个是字符串,另一个是数字。 -
我们不是在不到两周前讨论过这个确切的问题吗:stackoverflow.com/q/47916150/3397771?
-
这不是 Handlebars,而是您实现数据和助手的方式。只需更新您的帮助器(或创建一个新的)来进行丢失相等比较:
return obj == value ? trueString : falseString;。见:developer.mozilla.org/en-US/docs/Web/JavaScript/…
标签: handlebars.js