说我有JSON:
{
userinput: [
{name: "brian", "value": "i like pies"},
{name: "susan", "value": "memes are stupid"}
],
feedback: [
{value: "i also like pies"},
{value: "null"}
]
}
Run Code Online (Sandbox Code Playgroud)
而我正试图绘制一个这样的表格:
name ..... | input ...... | feedback
-----------|----------------|-----------------
brian | I like pies | I also like pies
susan | mems are stupid| null
Run Code Online (Sandbox Code Playgroud)
虽然我认识到将反馈作为"用户输入"的价值会更好,但我所做的并不像那样......
我正试图在{{#each userinput}}`中获取反馈索引,例如
{{#each userinput}}
<td>{{name}}</td><td>{{value}}</td><td>{{../feedback[@index].value}}</td>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
但当然{{../feedback[@index].value}}不行.
什么是最好的方法(不改变json的结构)来获取反馈数组中匹配索引的值?
nic*_*aef 14
这可以通过使用来完成的lookup帮助:
该
lookup助手允许使用把手变量的动态参数的分辨率.这对于解析数组索引的值很有用.
所以你的例子的模板看起来像这样:
{{#each userinput}}
<td>{{name}}</td>
<td>{{value}}</td>
<td>
{{#with (lookup ../feedback @index)}}
{{value}}
{{/with}}
</td>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
我想你必须为此编写一个块助手,因为它似乎@index只能用作独立的。
我修改了“列表”示例,以允许使用如下模板: "{{#list userinput feedback}}<td>{{name}}</td><td>{{value}}</td><td>{{@feedback.value}}</td>{{/list}}"。实现是这样的,接受两个参数“输入”和“反馈”(加上标准的“选项”)。
Handlebars.registerHelper('list', function(input, feedback, options) {
var out = "", data;
// iterate over the input
for (var i=0; i<input.length; i++) {
if (options.data) {
data = Handlebars.createFrame(options.data || {});
// add "feedback" item to the current frame's data
data.feedback = feedback[i];
}
out += "<tr>" + options.fn(input[i], { data: data }) + "</tr>";
}
return out;
});
Run Code Online (Sandbox Code Playgroud)