我正在 Knockout 项目中设置一个模板系统,目标是能够随时调用函数 loadTemplate("templateName") 将新模板加载到 View 中。
我有一个可以工作的版本,我可以调用 loadHomeTemplate()
或 loadSearchTemplate()
并且它会工作。
但现在我尝试修改它,以便可以调用 loadTemplate("Home")
或 loadTemplate("Search")
。
由于某种原因,第二个版本在 this.name = ko.observable(name);
上中断。 this.name 未定义 - 我已添加控制台日志来查看错误。我不明白。在这两种情况下,我似乎都将相同的内容传递给 buildTemplate 的“name”参数。没有?
一些注意事项:我像这样绑定(bind)到“template-content”元素,因为我正在运行多个 View 模型。我将 loadTemplate
或 loadHomeTemplate
声明为全局变量,因为我需要能够随时运行这些方法。可能有更好的方法来做到这一点,但我还没有弄清楚。
最佳答案
主要问题是 buildTemplate
必须与 new
一起使用,因为它将自身初始化为所选模板的持有者。此修复解决了对 name
的不当访问。
self.currentTemplate(new buildTemplate(name, templateData));
在我的 fork 中,我还创建了 templateFactory
对象,该对象保存所有特定模板的内部构造函数。它使搜索正确的构造函数变得简单而自信。
关于javascript - 在 KnockoutJS 中将数据传递给可观察对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419588/