将Knockout绑定应用于页面的特定部分:我做错了什么?

时间:2013-12-10 16:35:04

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

守则

背景/我正在努力完成的事情

  • 我想在我们的网站上放置一个反馈按钮,可能在Site.Master文件中(这是一个asp.net网站)
  • 点击反馈链接后,我想显示一个模态对话框
  • 我想将模态中的链接和元素绑定到特定的淘汰视图模型
  • 我想正确命名它,以便它不会干扰其他页面上可能出现的任何其他脚本
  • 我想将Knockout绑定仅应用于代码的这一部分,因为其他后续页面等也可能具有绑定。

为此,我有以下主要工具集: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'));

绑定的链接部分(即用于显示对话框的viewmodel函数的mound)仍然有效。但是, 模式对话框中的任何绑定都不起作用。

问题(S)

  • 在这种情况下,如何才能将viewModel正确应用于网站的某个部分?
  • 这种处理方法是否仍然会导致可能加载自己的淘汰视图模型并应用它们的子页面出现问题?
  • 还有其他这类事情的例子吗?我一直在寻找但却无法找到它们。

预先感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:3)

问题在于:

self.Start();

这会设置模态,将其从FeedbackArea div中删除。这发生在创建 viewmodel的过程中,这样当这个新创建的vm实际上在片刻之后实际应用于div时,该模态现在已经消失了,这就是为什么它内部的任何内容都没有响应它当您将VM应用于整个页面时。

我会确保在应用绑定后调用Start方法。

LIKE THIS