Cai*_*ifa 6 javascript ruby-on-rails mustache
以下是资源:
JSON
{
"badges":{
"unlocked": [
{"name": "Win 1"},
{"name": "Win 2"},
{"name": "Win 3"}
],
"locked":[
{"name": "Lose 1"},
{"name": "Lose 2"},
{"name": "Lose 3"}
]
}
}
Run Code Online (Sandbox Code Playgroud)
算法
{{ if_has_badges }}
<div class="badges">
<h1>Badges</h1>
{{ if_has_badges_unlocked }}
<div class="badges-unlocked">
<h2>Unlocked!</h2>
{{ loop_badges_unlocked }}
<a href="#" class="badge">
<strong>{{ name }}</strong>
</a>
{{ end_loop_badges_unlocked }}
</div>
{{ end_if_has_badges_unlocked }}
{{ if_has_badges_locked }}
<div class="badges-locked">
<h2>Locked!</h2>
{{ loop_badges_locked }}
<a href="#" class="badge">
<strong>{{ name }}</strong>
</a>
{{ end_loop_badges_locked }}
</div>
{{ end_if_has_badges_locked }}
</div>
{{ end_if_has_badges }}
Run Code Online (Sandbox Code Playgroud)
我如何编写这个算法来使用Mustache编译器?
我需要这样做才能与双方合作,首先是RubyOnRails应用程序,第二个是客户端(JavaScript).
您的问题有两种解决方案.
以下是胡子文档中的示例:
{
"repos": []
}
Run Code Online (Sandbox Code Playgroud)
模板:
{{#repos}}<b>{{name}}</b>{{/repos}}
{{^repos}}No repos :({{/repos}}
Run Code Online (Sandbox Code Playgroud)
输出:
No repos :(
Run Code Online (Sandbox Code Playgroud)
正如您所看到的倒置选择让我做条件逻辑.在你的情况下,它看起来像:
JSON:
var viewModel = {
badges:[]//badges here
}
viewModel.anyBadges = badges.length >0;
Run Code Online (Sandbox Code Playgroud)
胡子:
<div class="badges-unlocked">
{{#anyBadges}}
<h2>Unlocked!</h2>
{{/anyBadges}}
{{#badges_unlocked}}
<a href="#" class="badge">
<strong>{{ name }}</strong>
</a>
{{/badges_unlocked}}
Run Code Online (Sandbox Code Playgroud)
这就是我要做的.如果你的Mustache模板中有条件逻辑,我认为你做错了.你可以使用Handlebars而不是在这方面更先进,或者将你的逻辑移到其他地方(到你的javascript).
请参阅Mustache自述文件
最好的答案(对于Ruby和JavaScript)是将逻辑(if_has_badges类型问题)封装到View类中.
实际上,您可以使用array length属性伪装它以获得Ruby和JavaScript中所需的一点逻辑:
{{# badges.length }}
<div class="badges">
<h1>Badges</h1>
{{# badges.unlocked.length }}
<div class="badges-unlocked">
<h2>Unlocked!</h2>
{{# badges.unlocked }}
<a href="#" class="badge">
<strong>{{ name }}</strong>
</a>
{{/ badges.unlocked }}
</div>
{{/ badges.unlocked.length }}
{{# badges.locked.length }}
<div class="badges-locked">
<h2>Locked!</h2>
{{# badges.locked }}
<a href="#" class="badge">
<strong>{{ name }}</strong>
</a>
{{/ badges.locked }}
</div>
{{# badges.locked.length }}
</div>
{{/ badges.length }}
Run Code Online (Sandbox Code Playgroud)
但这样做有点肮脏......
| 归档时间: |
|
| 查看次数: |
19638 次 |
| 最近记录: |