Kev*_*vin 31 javascript client-templates handlebars.js
我正在使用Handlebars.js模板引擎,并试图找到一种方法来做这样的事情(人为的例子):
{{#if itemSelected "SomeItem"}}
<div>This was selected</div>
{{/if}
Run Code Online (Sandbox Code Playgroud)
这itemSelected是一个如此注册的助手:
Handlebars.registerHelper("itemSelected", function(item) {
var selected = false;
// Lots of logic that determines if item is selected
return selected;
});
Run Code Online (Sandbox Code Playgroud)
尝试将此语法用于模板时出现错误,我找不到任何显示此类事物的示例.我确实看到像这样简单的#if块......
{{#if myValueInContext}}
<div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何解决第一个例子.也许我正在接近这个错误.
顺便说一句,我标记了这个Mustache,因为我无法在问题中添加Handlebars标签.
小智 94
您应该在嵌入式帮助器调用周围添加括号:
{{#if (itemSelected "SomeItem")}}
<div>This was selected</div>
{{/if}
Run Code Online (Sandbox Code Playgroud)
我做了实验并证实它确实有效.
不确定它是否在Handlebars文档中提到过.我从车把布局的例子中学到了诀窍.
小智 44
使用Handlebars的最后一个版本(1.0.rc.1),你必须写得像:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
});
Run Code Online (Sandbox Code Playgroud)
即.block(this)被options.fn(this)取代
http://handlebarsjs.com/block_helpers.html#conditionals
Ste*_*fen 35
我不认为这会起作用.如果我理解把手文档是正确的,那么#if本身就是一个已注册的块助手,并且不会将另一个已注册的助手作为参数.
根据文档,您可以像这样实现它
Handlebars.registerHelper('ifItemSelected', function(item, block) {
var selected = false;
// lots of logic that determines if item is selected
if(selected) {
return block(this);
}
});
Run Code Online (Sandbox Code Playgroud)
之后你应该可以用它来调用它
{{#ifItemSelected SomeItem}}
This was selected
{{/ifItemSelected}
Run Code Online (Sandbox Code Playgroud)
但你必须确保SomeItem具有正确的格式.我没有看到在if语句中使用已注册的处理程序作为条件的方法.
如果您也想使用else选项,则需要以下代码:
Handlebars.registerHelper('ifItemSelected', function(item, options) {
var selected = false;
// lots of logic that determines if item is selected
if (selected) {
return options.fn(this);
}
else {
return options.inverse(this);
}
});
Run Code Online (Sandbox Code Playgroud)
用于:
{{#ifItemSelected SomeItem}}
This was selected
{{else}}
This was not selected
{{/ifItemSelected}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23745 次 |
| 最近记录: |