Handlebar.js与{{this}}的条件比较
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
(可用模式的平面数组,字符串)的对象,以及curmode
,它是包含当前所选模式的字符串。
据我所知,一切都很顺利——我可以正确显示data.curmode
和每个data.modes
。然而,它并没有在匹配时输出selected="selected"
。
使用迭代器(如#each
)时,块内的所有内容都会相对于当前元素进行引用。所以,如果你这样说:
{{#each a}}
{{x}}
{{/each}}
Handlebars将在a
的当前值中查找x
,而不是在模板的全局命名空间中查找。因此,如果您想获得顶级data.curmode
:,则需要查看{{#each data.modes}}
值之外的内容
<select name="mode">
{{#each data.modes}}
<option {{#ifCond ../data.curmode '==' this}} ...
{{/each}}
</select>
../
让您更上一层楼。
演示:http://jsfiddle.net/ambiguous/Sz6VT/
相关文章:
- 比较从函数和生成的日期对象
- 如何使用 node.js 比较两个 json 数组
- 通过js在新选项卡中有条件地打开url
- 比较IF条件下的两个javascript数值
- 比较数组并使用条件对数组列表进行排序
- JavaScript if/else 条件和比较 - 差异
- 在 Foreach 循环中使用 IF 条件来比较数据绑定值
- JavaScript 赋值与条件检查中的代码效率和速度比较
- 无法在 js 中的条件语句中比较 0
- 在条件中使用逻辑运算符和比较运算符(javascript)
- Handlebar.js与{{this}}的条件比较
- 使用javascript中的if条件比较for循环中的两个字符串
- 将变量与if条件中的空jquery对象进行比较
- 比较数组以确定获胜条件
- 不能比较条件语句中int类型的变量
- If条件在javascript中比较时不起作用
- JS:为什么这个比较慢?它不应该测试其他OR条件,但它确实测试了
- Javascript:在条件中比较函数和数组的输出
- Javascript-比较两个数组,然后在满足条件的情况下推送到新数组
- jQuery/JavaScript使用条件语句与省略条件语句的效率比较