javascript - 在 KnockoutJS 中将数据传递给可观察对象时出现问题

标签 javascript knockout.js

我正在 Knockout 项目中设置一个模板系统,目标是能够随时调用函数 loadTemplate("templateName") 将新模板加载到 View 中。

我有一个可以工作的版本,我可以调用 loadHomeTemplate()loadSearchTemplate() 并且它会工作。

JS Fiddle link .

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

JS Fiddle link .

由于某种原因,第二个版本在 this.name = ko.observable(name); 上中断。 this.name 未定义 - 我已添加控制台日志来查看错误。我不明白。在这两种情况下,我似乎都将相同的内容传递给 buildTemplate 的“name”参数。没有?

一些注意事项:我像这样绑定(bind)到“template-content”元素,因为我正在运行多个 View 模型。我将 loadTemplateloadHomeTemplate 声明为全局变量,因为我需要能够随时运行这些方法。可能有更好的方法来做到这一点,但我还没有弄清楚。

最佳答案

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

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

在我的 fork 中,我还创建了 templateFactory 对象,该对象保存所有特定模板的内部构造函数。它使搜索正确的构造函数变得简单而自信。

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

关于javascript - 在 KnockoutJS 中将数据传递给可观察对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419588/

相关文章:

javascript - 异步函数作为 knockout 绑定(bind)目标

javascript - knockout applyBindings 更改事件

javascript - 如何将 javascript 转换为 jquery + 在 Wordpress 中使用它

knockout.js - knockout.js 动画的声明性链接?

javascript - ng-click 未对 td 单元执行

javascript - 如何制作类似Tinder的浏览器效果,即 "swipe"使用方向键左右通过一系列卡片?

javascript - knockout javascript 函数从数组中读取

javascript - Knockout.js - 值更新 : afterkeydown too fast

javascript - 如何使用 Array.from 和 forEach 从多个表单字段值中获取值

javascript - 如何识别 socket.io 中的用户?