2013-03-14 84 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