[英]Handlebar.js Conditional comparison to {{this}}
我正在使用以下助手來進行條件比較:
Handlebars.registerHelper("ifCond", function (v1, operator, v2, options) {
switch (operator) {
case "==":
return (v1 == v2) ? options.fn(this) : options.inverse(this);
case "===":
return (v1 === v2) ? options.fn(this) : options.inverse(this);
case "<":
return (v1 < v2) ? options.fn(this) : options.inverse(this);
case "<=":
return (v1 <= v2) ? options.fn(this) : options.inverse(this);
case ">":
return (v1 > v2) ? options.fn(this) : options.inverse(this);
case ">=":
return (v1 >= v2) ? options.fn(this) : options.inverse(this);
default:
return options.inverse(this);
}
});
然后我有這樣的模板設置:
<select name="mode">
{{#each data.modes}}
<option {{#ifCond data.curmode '==' this}} selected="selected" {{/ifCond}} value="{{this}}">{{this}}</option>
{{/each}}
</select>
我傳入的data
是一個包含modes
(可用modes
的平面數組,字符串)的對象,而curmode
是一個包含當前所選模式的字符串的對象。
據我所知,一切順利進行-我可以顯示data.curmode
並且每個data.modes
正確填充。 但是,它不會在匹配時輸出selected="selected"
。
當使用迭代器(例如#each
,相對於當前元素引用塊中的所有內容。 因此,如果您這樣說:
{{#each a}}
{{x}}
{{/each}}
把手會尋找x
的當前值中a
,而不是在模板的全局命名空間。 因此,如果您想獲取頂級data.curmode
,則需要查看{{#each data.modes}}
值data.curmode
:
<select name="mode">
{{#each data.modes}}
<option {{#ifCond ../data.curmode '==' this}} ...
{{/each}}
</select>
../
您提升一個級別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.