2012-05-03 26 views
1

我想從嵌套模板訪問父數據。從外部環境獲取屬性數據

根據這https://github.com/BorisMoore/jsrender/issues/34,我試圖做類似的somehing但我得到錯誤:data.parent是未定義的。

在我 '主人' 模板我有聲明

{{for Rooms tmpl="#RoomTmpl" layout=true /}} 

,並在#RoomTmpl

<script id="RoomTmpl" type="text/x-jsrender"> 
    {{:parent.data.Room1Label}} 
    {{for #data}} 
     {{:RoomName}} 
    {{/for}} 
</script> 

我嘗試各種組合,但我總是得到一個錯誤

{{:parent.parent.data.Room1Label}} 
{{:#data.parent.parent.data.Room1Label}} 
{{:#data.parent.data.Room1Label}} 
{{:#data.parent.Room1Label}} 

有誰知道h這樣做嗎?

- SOLUTION -

正確synatx是

#parent.parent.data.Room1Label 

回答

7

您想通過的意見,加強和從父視圖獲取數據。視圖是渲染模板的結果,因此嵌套塊標記(例如{{for ...}} ... {{/ for}}或{{if ...}} ... {{/如果}}將添加子視圖。如果將一個數組傳遞給'for'標籤{{for myArray}},它將迭代數據數組並導致一個子數據視圖的data屬性爲數組,然後該視圖將收集子視圖爲每個渲染項目。所以你需要知道#view是視圖,#view.parent是父視圖,#view.parent.data是父視圖的數據等#foo是#view.foo的簡稱,所以#數據是數據,父視圖#parent等

現在唯一的問題是正確計數父母的數量。您可以通過向數據添加方法來調試進行的操作:{... properties ...,test:function(){debugger;}}。現在,在該數據項的模板中的任意位置添加{{:test()}},然後進入編譯的模板:查看視圖,父項等。

另一個竅門。如果您在任何塊標籤上設置模板變量,則可以從任何嵌套模板訪問它。所以,在你的榜樣,你可以把

{{for Rooms tmpl="#RoomTmpl" ~label=Room1Label layout=true /}}

,然後從嵌套模板訪問它:

{{:~label}}

這樣,您不再需要擔心過父母的意見加緊。