2015-08-30 62 views
0

比如我有一個列表,裏面有頭,身體,頁腳和身體有項目何時創建模板?

所以我創造這樣的事情

<template name="List"> 
{{> ListHeader}} 
{{> ListBody data}} 
{{> ListFooter}} 
</template> 
<template name="ListBody"> 
<div class="list-body"> 
    {{#each items}} 
    {{> ListItem data}} 
    {{/each}} 
</div> 
</template> 
在列表項

,我將顯示玩一些動作按鈕,如根據一些init數據編輯/刪除。

所以它會變得非常複雜。手段,我必須定義它,當我創建List

{{> List showEdit=true showDelete=true}} 

然後在Template.List.helpers,再次定義showEdit,並把它傳遞給ListBody

Template.List.helpers({ 
    showEdit: return this.showEdit: 
}) 

{{> ListBody showEdit=showEdit showDelete=true}} 

在ListBody再次定義showEdit並把它傳遞給列表項

Template.ListBody.helpers({ 
    showEdit: return this.showEdit: 
}) 

{{> ListItem showEdit=showEdit showDelete=true}} 

所以我覺得我做錯了什麼。也許我不應該創建這麼多的模板? 只是把他們放在一個地方?

什麼時候應該創建模板?最佳做法是什麼?

回答

0

正如你已經表明你明白,單獨的模板可以有不同的數據上下文,這可能會令人困惑/混亂。但是,在許多情況下,這是可取的,並且可以使代碼更易於維護和更易讀。

如在例如:

{{#each items}} 
    {{> listItem}} 
{{/each}} 

在這種情況下傳遞給listItem數據上下文被自動爲陣列中的每個項目中設定。 (注意,你不需要通過data來做到這一點。)所以使用一個新的模板是有道理的。

使用單獨模板的另一個原因是可重用性。隨着項目的發展,這變得越來越重要,它試圖預先考慮你可能在其他地方重用的元素。

如您所示,您可以在調用數據時將數據傳遞到模板中。這既不好也不壞,但我會謹慎做太多,因爲這可能會導致過度複雜的事情。一般來說,你需要乾淨的模塊化模板,當你看着它們時,它們是有意義的,不要讓你四處尋找,試圖弄清楚爲什麼他們沒有做到你期望的事情!

爲此,看看Template level subscriptionsReactive variables。它們一起可以將模板轉換爲強大的模塊化組件。當我說你會感謝你養成習慣於以後用這種方式建立你的模板時,我從經驗中講述。

最後,弄清楚這個問題的最好方法是稍微玩一下,瀏覽其他項目,看看他們做了什麼。一句警告:圍繞模板結構的最佳實踐已經隨着Meteor的發展而發生了變化,因此一些在線諮詢可能不會利用更新,更好的做法。

-1

這只是個人喜好。我不認爲在創建儘可能多的模板方面存在問題。你爲什麼寫信你認爲你做錯了什麼?