代码
- 您可以在以下位置找到有问题的 JSFiddle:http://jsfiddle.net/SeanKilleen/A3QtJ/
背景/我想要完成的事情
- 我想在我们的网站上放置一个反馈按钮,可能在 Site.Master 文件中(它是一个 asp.net 网站)
- 单击反馈链接时,我想显示一个模式对话框
- 我想将模态框内的链接和元素绑定(bind)到特定的 knockout viewmodel
- 我想给它适当的命名空间,这样它就不会干扰可能出现在其他页面上的任何其他脚本
- 我只想将 Knockout 绑定(bind)应用到这部分代码,因为其他后续页面等也可能有绑定(bind)。
为此,我有以下主要工具集:Knockout、jQuery 和 jQueryUI(jQueryUI 不是我的特定选择,但那艘船已经起航)。
问题
在JSFiddle link ,以下代码目前有效:
$(document).ready(function () {
vm = new FeedbackNamespace.ViewModel();
ko.applyBindings(vm);
});
但是,当我将 ko.applyBindings(vm)
更改为:
ko.applyBindings(vm, document.getElementById('FeedbackArea'));
绑定(bind)的链接部分(绑定(bind)到 View 模型函数以显示对话框)仍然有效。但是,模态对话框内的绑定(bind)都仍然有效。
问题
- 在这种情况下,我如何才能将 viewModel 正确地应用于网站的一部分?
- 这种处理方法是否仍然会导致子页面出现问题,这些子页面可能会加载自己的 knockout View 模型并应用它们?
- 还有其他类似的例子吗?我一直在找,但找不到。
在此先感谢您提供的任何帮助!
最佳答案
问题出在这里:
self.Start();
这会设置模态,将其从 FeedbackArea
div 中移除。这发生在创建 viewmodel 的过程中,因此当这个新创建的 vm 稍后实际应用于 div 时,该模态现在消失了,这就是为什么它内部没有任何响应的原因当您将 VM 应用于整个页面时会执行此操作。
我会确保在您应用绑定(bind)后调用 Start 方法。
关于javascript - 将 Knockout 绑定(bind)应用于页面的特定部分 : What am I doing wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499990/