JSrender:如果条件,则无法访问父变量

时间:2013-07-19 13:17:44

标签: javascript jsrender

正如标题所说,问题很明显:

在建筑中:

{{if is_completed == 1}}
 <div>
   <p>{{:#parent.parent.data.myproperty}}</p>
 </div>
{{/if}}

父资产不可见!

我通过在父循环中创建类似:{{for movies~myproperty = myproperty}}的结构来解决它,并且在my条件下可以看到~myproperty,但是如果我有多个变量,如果我有多级嵌套怎么办?数据结构?

1 个答案:

答案 0 :(得分:5)

{{if ...}}块添加了另一个视图,因此您需要添加.parent来逐步查看该视图,如:{{:#parent.parent.parent.data.myproperty}}

你可以按照你所说的那样传递变量(~myproperty=...),它们对任何深度的嵌套都是可见的。

您的变量也可以是对象,例如当前数据对象:~myObj=#data

{{sometag a=b ~myObj=#data}}
    ....
    {{:~myObj.myproperty}}
    ...
{{/sometag}}

因此您不需要为每个属性使用单独的变量。

您还可以访问顶级数据对象并从那里向下钻取:

{{:~root.foo...myproperty}}

最后,您可以使用#get("item")逐步查看任意数量的{{if}}块,并获取最近的“项目”视图(即重复{{for ...}}块的项目视图)。

所以你会写:

{{:#get("item").data.myproperty}}