pro*_*nis 1 jquery-templates jsrender
我试图从嵌套模板访问父数据.
根据这个https://github.com/BorisMoore/jsrender/issues/34,我试图做类似的事情,但我得到错误:data.parent未定义.
在我的"主"模板中,我有声明
{{for Rooms tmpl="#RoomTmpl" layout=true /}}
Run Code Online (Sandbox Code Playgroud)
并在#RoomTmpl中
<script id="RoomTmpl" type="text/x-jsrender">
{{:parent.data.Room1Label}}
{{for #data}}
{{:RoomName}}
{{/for}}
</script>
Run Code Online (Sandbox Code Playgroud)
我尝试了各种组合但总是出错
{{:parent.parent.data.Room1Label}}
{{:#data.parent.parent.data.Room1Label}}
{{:#data.parent.data.Room1Label}}
{{:#data.parent.Room1Label}}
Run Code Online (Sandbox Code Playgroud)
有谁知道怎么做?
- 解决方案 -
正确的synatx是
#parent.parent.data.Room1Label
Run Code Online (Sandbox Code Playgroud)
您希望逐步浏览视图并从父视图中获取数据.视图是渲染模板的结果,因此嵌套的块标记,例如{{for ...}} ... {{/ for}}或{{if ...}} ... {{/ if}}将添加子视图.如果将数组传递给'for'标记{{for myArray}},它将遍历数据数组并导致一个子视图的数据属性为数组,然后该视图将包含子视图的集合对于每个呈现的项目.
所以你需要知道#view是视图,#view.parent是父视图,#view.parent.data是父视图的数据等.#foo是#view.foo的缩写,所以#data是数据,#parent父视图等
现在唯一的问题是正确计算父母的数量.您可以通过向数据添加方法来调试正在进行的操作:{... properties ...,test:function(){debugger;}}.现在在该数据项的模板中的任何位置添加{{:test()}},然后进入已编译的temmplate:查看视图,其父项等.
另一招.如果在任何块标记上设置模板变量,则可以从任何嵌套模板访问它.所以在你的例子中,你可以把
{{for Rooms tmpl ="#RoomTmpl"~label = Room1Label layout = true /}}
然后从嵌套模板访问它:
{{:〜标签}}
这样您就不再需要担心升级父视图了.
| 归档时间: |
|
| 查看次数: |
1557 次 |
| 最近记录: |