我正在使用Handlebars.js进行客户端视图渲染.如果Else工作得很好但我遇到了需要ELSE IF的3路条件:
这不起作用:
{{#if FriendStatus.IsFriend }}
<div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div>
{{else if FriendStatus.FriendRequested}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div>
{{else}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div>
{{/if}}
Run Code Online (Sandbox Code Playgroud)
如何使用把手进行ELSE IF?
Car*_*arl 355
Handlebars支持{{else if}}3.0.0以上的块.
车把v3.0.0或更高:
{{#if FriendStatus.IsFriend}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div>
{{else if FriendStatus.FriendRequested}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div>
{{else}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div>
{{/if}}
Run Code Online (Sandbox Code Playgroud)
但是,在Handlebars v3.0.0之前,您必须定义一个帮助程序来if手动处理分支逻辑或嵌套语句:
{{#if FriendStatus.IsFriend}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div>
{{else}}
{{#if FriendStatus.FriendRequested}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div>
{{else}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div>
{{/if}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)
dri*_*nor 75
我通常使用这种形式:
{{#if FriendStatus.IsFriend}}
...
{{else}} {{#if FriendStatus.FriendRequested}}
...
{{else}}
...
{{/if}}{{/if}}
Run Code Online (Sandbox Code Playgroud)
Zig*_*ggy 37
车把的精神在于它是"无逻辑的".有时这会让我们觉得我们正在与它斗争,有时我们最终会遇到丑陋的嵌套if/else逻辑.你可以写一个帮手; 许多人用"更好"的条件操作员来增加把手,或者认为它应该是核心的一部分.不过,我想,不是这样,
{{#if FriendStatus.IsFriend}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div>
{{else}}
{{#if FriendStatus.FriendRequested}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div>
{{else}}
<div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div>
{{/if}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)
你可能想在你的模型中安排一些东西,这样你就可以拥有它,
{{#if is_friend }}
<div class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></div>
{{/if}}
{{#if is_not_friend_yet }}
<div class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></div>
{{/if}}
{{#if will_never_be_my_friend }}
<div class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></div>
{{/if}}
Run Code Online (Sandbox Code Playgroud)
只需确保这些标志中只有一个是真的.如果你if/elsif/else在视图中使用它,你可能也在其他地方使用它,所以这些变量可能不会是多余的.
保持精益.
小智 36
手柄现在支持{{else if}}3.0.0.因此,您的代码现在应该可以工作.
您可以在"条件"下看到一个示例(稍微修改一下,添加了{{else}}:
{{#if isActive}}
<img src="star.gif" alt="Active">
{{else if isInactive}}
<img src="cry.gif" alt="Inactive">
{{else}}
<img src="default.gif" alt="default">
{{/if}}
Run Code Online (Sandbox Code Playgroud)
http://handlebarsjs.com/block_helpers.html
我写了这个简单的帮手:
Handlebars.registerHelper('conditions', function (options) {
var data = this;
data.__check_conditions = true;
return options.fn(this);
});
Handlebars.registerHelper('next', function(conditional, options) {
if(conditional && this.__check_conditions) {
this.__check_conditions = false;
return options.fn(this);
} else {
return options.inverse(this);
}
});
Run Code Online (Sandbox Code Playgroud)
这就像Handlebars中的Chain of Responsibility模式
例:
{{#conditions}}
{{#next condition1}}
Hello 1!!!
{{/next}}
{{#next condition2}}
Hello 2!!!
{{/next}}
{{#next condition3}}
Hello 3!!!
{{/next}}
{{#next condition4}}
Hello 4!!!
{{/next}}
{{/conditions}}
Run Code Online (Sandbox Code Playgroud)
这不是别的,但在某些情况下它可能对你有帮助)
| 归档时间: |
|
| 查看次数: |
241350 次 |
| 最近记录: |