这是JSON数组:
{
"profile": [
{
"ID": 343,
"gender": "female",
"from": "Olivia"
},
{
"ID": 4543,
"gender": "female",
"from": "Meagen"
},
{
"ID": 787,
"gender": "male",
"from": "Aaron"
}
]
}
Run Code Online (Sandbox Code Playgroud)
这有效,它输出数组中的所有对象......
{{#profile}}
{{from}} {{gender}}
{{/profile}}
Run Code Online (Sandbox Code Playgroud)
输出看起来像......
Olivia female
Meagen female
Aaron male
Run Code Online (Sandbox Code Playgroud)
但我的目标是只圈出那些性别与女性相等的人.就像是...
{{#profile gender="female"}}
{{from}} {{gender}}
{{/profile}}
Run Code Online (Sandbox Code Playgroud)
...并使输出看起来像......
Olivia female
Meagen female
Run Code Online (Sandbox Code Playgroud)
几天来,我一直在努力寻找答案.我错过了一些东西还是偏离轨道?
我看到两个选择:
第一个很直接.
第二个取决于你想要怎么做.你可以添加一个"if equal"帮助器:
Handlebars.registerHelper('if_eq', function(a, b, block) {
return a == b
? block(this)
: block.inverse(this);
});
Run Code Online (Sandbox Code Playgroud)
并在您的模板中执行此操作:
{{#profile}}
{{#if_eq gender "female"}}
{{from}} {{gender}}
{{/if_eq}}
{{/profile}}
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/ambiguous/NnH83/
或者你可以用各种方式编写自己的迭代器:
Handlebars.registerHelper('each_female', function(list, opts) {
var i, result = '';
for(i = 0; i < list.length; ++i)
if(list[i].gender == 'female')
result = result + opts.fn(list[i]);
return result;
});
{{#each_female profile}}
{{from}} {{gender}}
{{/each_female}}
Run Code Online (Sandbox Code Playgroud)
或者更一般:
Handlebars.registerHelper('each_when', function(list, k, v, opts) {
console.log(arguments);
var i, result = '';
for(i = 0; i < list.length; ++i)
if(list[i][k] == v)
result = result + opts.fn(list[i]);
return result;
});
{{#each_when profile "gender" "female"}}
{{from}} {{gender}}
{{/each_when}}
Run Code Online (Sandbox Code Playgroud)
演示:http://jsfiddle.net/ambiguous/E4jTs/,http://jsfiddle.net/ambiguous/AkZxN/
如果您想要更接近您提出的语法,请参阅Hash Arguments 的精细手册.
| 归档时间: |
|
| 查看次数: |
3771 次 |
| 最近记录: |