如何访问 JsRender 嵌套模板中的父数据属性
How to access parent data properties in JsRender nested templates
http://jsfiddle.net/tQnVt/621/
这个fiddle说明了我的问题。
假设我在 jsrender 模板的帮助下将 JSON 绑定到视图上。
var vm = {
foo: {color: "red",otherObjectToMatch:"object"},
testData: [{color: "red"}, {color: "yellow"}, {color: "blue"}]
};
对象 vm
有 2 个属性-
1) 普通对象
2) 对象数组。
模板-
<script id="template" type="text/x-jsrender">
<p>
{{:foo.color}}
</p>
<ul>
{{for testData}}
<li>index: {{>color}}</li>
{{/for}}
</ul>
</script>
我想通过其 属性 从普通对象 #1
进行匹配,如果其 属性 颜色与循环中的 属性 匹配,则将应用一些 class.
我试过了-
<p>
{{:foo.color}}
</p>
<ul>
{{for testData}}
{{if foo.color=={{>color}} }}
<li class='match'>index: {{>color}}</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
</ul>
这是一次失败的尝试。我在jsrender中找不到如何与其他对象匹配。
你需要写
{{if xxx.foo.color===color}}
其中 xxx
是父数据 - 在您的情况下,您作为根数据传入的 vm
。
(都是关于“视图层次结构”的——参见:http://www.jsviews.com/#views. See also the specific topic Accessing parent data)
这里有几种不同的方法来获取父视图上的数据:
访问 ~root
这是根数据的快捷方式助手:
{{for testData}}
{{if ~root.foo.color===color}}
<li class='match'>index: {{>color}} (match)</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
创建上下文模板参数 ~foo
以将 foo
属性 从父数据传递到嵌套模板上下文:
{{for testData ~foo=foo}}
{{if ~foo.color===color}}
<li class='match'>index: {{>color}} (match)</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
通过父 view
对象,获取数据视图:
{{for testData}}
{{if #parent.parent.data.foo.color===color}}
<li class='match'>index: {{>color}} (match)</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
使用 view.get()
帮助程序查找类型为 "data"
的视图的父级
{{for testData}}
{{if #get("data").data.foo.color===color}}
<li class='match'>index: {{>color}} (match)</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
我将它们全部添加到你的 jsfiddle 中:http://jsfiddle.net/tQnVt/625/
另请参阅此相关回复:
此外,您可以使用 #parent
。
请参阅文档 link。
http://jsfiddle.net/tQnVt/621/
这个fiddle说明了我的问题。
假设我在 jsrender 模板的帮助下将 JSON 绑定到视图上。
var vm = {
foo: {color: "red",otherObjectToMatch:"object"},
testData: [{color: "red"}, {color: "yellow"}, {color: "blue"}]
};
对象 vm
有 2 个属性-
1) 普通对象
2) 对象数组。
模板-
<script id="template" type="text/x-jsrender">
<p>
{{:foo.color}}
</p>
<ul>
{{for testData}}
<li>index: {{>color}}</li>
{{/for}}
</ul>
</script>
我想通过其 属性 从普通对象 #1
进行匹配,如果其 属性 颜色与循环中的 属性 匹配,则将应用一些 class.
我试过了-
<p>
{{:foo.color}}
</p>
<ul>
{{for testData}}
{{if foo.color=={{>color}} }}
<li class='match'>index: {{>color}}</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
</ul>
这是一次失败的尝试。我在jsrender中找不到如何与其他对象匹配。
你需要写
{{if xxx.foo.color===color}}
其中 xxx
是父数据 - 在您的情况下,您作为根数据传入的 vm
。
(都是关于“视图层次结构”的——参见:http://www.jsviews.com/#views. See also the specific topic Accessing parent data)
这里有几种不同的方法来获取父视图上的数据:
访问 ~root
这是根数据的快捷方式助手:
{{for testData}}
{{if ~root.foo.color===color}}
<li class='match'>index: {{>color}} (match)</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
创建上下文模板参数 ~foo
以将 foo
属性 从父数据传递到嵌套模板上下文:
{{for testData ~foo=foo}}
{{if ~foo.color===color}}
<li class='match'>index: {{>color}} (match)</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
通过父 view
对象,获取数据视图:
{{for testData}}
{{if #parent.parent.data.foo.color===color}}
<li class='match'>index: {{>color}} (match)</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
使用 view.get()
帮助程序查找类型为 "data"
{{for testData}}
{{if #get("data").data.foo.color===color}}
<li class='match'>index: {{>color}} (match)</li>
{{else}}
<li>index: {{>color}}</li>
{{/if}}
{{/for}}
我将它们全部添加到你的 jsfiddle 中:http://jsfiddle.net/tQnVt/625/
另请参阅此相关回复:
此外,您可以使用 #parent
。
请参阅文档 link。