2013-03-14 58 views
1

我在我的挖空項目中設置了一個模板系統,目標是隨時調用函數loadTemplate(「templateName」)以將一個新模板加載到一個看法。將數據傳遞給KnockoutJS中的observable問題

我有一個版本的工作,我可以撥打loadHomeTemplate()loadSearchTemplate(),它會工作。

JS Fiddle link

但現在我試圖修改它,以便我可以撥打loadTemplate("Home")loadTemplate("Search")

JS Fiddle link

出於某種原因,第二個版本在this.name = ko.observable(name);上出現故障。 this.name未定義 - 我添加了控制檯日誌以查看錯誤。我不明白。在兩種情況下,我似乎都將相同的事情傳遞給buildTemplate的「name」參數。沒有?

一對夫婦筆記:我綁定到'template-content'元素,因爲我正在運行多個視圖模型。我聲明loadTemplateloadHomeTemplate作爲全局變量,因爲我需要能夠隨時運行這些方法。可能有更好的方法來做到這一點,但我還沒有想到。

回答

1

主要問題在於buildTemplate必須與new一起使用,因爲它將自己初始化爲選定模板的持有者。此修復解決了對name的不當訪問。

self.currentTemplate(new buildTemplate(name, templateData)); 

在我的叉子,我還創建templateFactory對象,適用於所有的特定模板裏面的構造。它使得搜索適當的構造函數容易和自信。

http://jsfiddle.net/AvYY4/1/

+0

對。我不能相信我錯過了「新」宣言。我也喜歡templateFactory的想法。好動作!謝謝。 – dmathisen 2013-03-14 21:40:14