1

我正在我的淘汰项目中设置模板系统,目标是能够随时调用函数 loadTemplate("templateName") 将新模板加载到视图中。

我有一个可以调用的版本,loadHomeTemplate()或者loadSearchTemplate()它会起作用。

JS 小提琴链接

但现在我正在尝试修改它,以便我可以调用loadTemplate("Home")or loadTemplate("Search")

JS 小提琴链接

出于某种原因,第二个版本在this.name = ko.observable(name);. this.name 未定义 - 我添加了控制台日志以查看错误。我不明白。在这两种情况下,我似乎都将相同的东西传递给 buildTemplate 的“名称”参数。不?

一些注意事项:我正在绑定到这样的“模板内容”元素,因为我正在运行多个视图模型。我声明loadTemplate或声明loadHomeTemplate为全局变量,因为我需要能够随时运行这些方法。可能有更好的方法来做到这一点,但我还没有弄清楚。

4

1 回答 1

1

主要问题是buildTemplate必须使用,new因为它将自己初始化为所选模板的持有者。此修复解决了对name.

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

在我的 fork 中,我还创建templateFactory了包含所有特定模板的构造函数的对象。它使寻找合适的构造函数变得容易和自信。

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

于 2013-03-14T21:10:09.950 回答