您可以为数据项创建自定义变量(相当于val
在 jQuery 模板版本中),如下所示:
{{for object.items itemVar='~val'}}
<span>{{:~val}}</span>
{{/for}}
当前没有自定义命名index
变量的功能。(可以想象使用语法添加支持{{for object.items itemVar='~val' indexVar='~i'}}
- 但目前尚未实现)。
但是,如果您想要为 #index 提供自定义变量的原因是为了使其可用于嵌套块范围,您可以#index
在嵌套标记上定义自定义变量,如下所示:
{{for object.items itemVar='~val'}}
{{someNestedTag ~i=#index}}
<span data-index="{{:~i}}">{{:~val}}</span>
{{/someNestedTag}}
{{/for}}
现在以具体案例为例:
{{each (r, row) object.rows}}
{{each (c, col) object.cols}}
//work with both index and item knowing which one is which
{{/each}}
{{/each}}
这是在 JsRender/JsViews 中执行此操作的一种方法:
{{for grid.rows ~grid=grid}}
{{for ~grid.cols ~rowIndex=#index ~row=#data}}
Row {{:~rowIndex}} {{:~row.rowProp}}
Col: {{:#index}} {{:colProp}}
{{/for}}
{{/for}}
如果你想通过 JsViews 使用数据链接,你可以写上面的代码:
{^{for grid.rows ~grid=grid}}
{^{for ~grid.cols ^~rowIndex=#index ~row=#data}}
Row {^{:~rowIndex}} {^{:~row.rowProp}}
Col: {^{:#index}} {^{:colProp}}
{{/for}}
{{/for}}
请注意,在 JsViews 版本中,因为我希望 ~rowIndex 在删除前面的行时通过数据绑定动态更新,所以我使用语法^~rowIndex
- 这是对数据绑定的选择。~rowIndex
最初会正确呈现,但在删除行时不会更新...
你可以看到
出于兴趣,另请参阅此处了解使用自定义标签的网格视图:
附加说明:针对下面的评论“为什么不继续使用 {{for (index, item) object}} 语法?”
在 JsRender 中,您可以非常轻松地创建自定义标签,所有标签共享一个共同的结构: http: //www.jsviews.com/#tags {{myTag arg0 arg1 namedProp1=xxx namedProp2=yyy}} ... {{/myTag }}使用命名参数(props)和未命名参数(args)。
所以itemVar='~val'适用于任何标签,甚至自定义标签(不仅仅是{{for ...}}),使用命名参数的标准语法,并允许您创建上下文模板参数(帮助参数)val对应于模板块(或块)的数据项。
同样在 JsRender 中,(表达式)语法已经具有作为 arg 的含义。例如,{{for (1 + 2)}}{{:}}{{/for}}将输出3!
在 jQuery 模板中,不支持自定义标签,并且(i, val)语法对于{{each}}标签是特殊的。
在常见情况下,您不需要自定义变量名称和 jQuery 模板语法:
{{each (i, val) object.items}}
<span data-index="${i}">${val}</span>
{{/each}}
(我会说)比 JsRender 稍微复杂一点:
{{for object.items}}
<span data-index="{{:#index}}">{{:}}</span>
{{/for}}