javascript - 将 Knockout 绑定(bind)应用于页面的特定部分 : What am I doing wrong?

标签 javascript jquery asp.net jquery-ui knockout.js

代码

背景/我想要完成的事情

  • 我想在我们的网站上放置一个反馈按钮,可能在 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 方法。

LIKE THIS

关于javascript - 将 Knockout 绑定(bind)应用于页面的特定部分 : What am I doing wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20499990/

相关文章:

javascript - 如果变量是全局变量,为什么需要将参数传递给 javascript 中的自执行函数?

javascript - 使用 Promise 进行多个 jQuery Ajax 调用

JavaScript - 获取数据属性的值返回未定义

asp.net - 间歇性 'the remote name could not be resolved'?

javascript - 在 Safari 和 Javascript 中使用 for in(最后一个键值设置为 map )

javascript - Shiny /DT : Show Child Rows Upon Initial Load

javascript - 我应该有一个大的 redux-form 还是多个

javascript - jQuery 验证submitHandler 不适用于$.ajax 发布表单数据

asp.net - 支持部署到 Windows Azure 的论坛软件

c# - 使用存储库模式加入 DbSet