Knockout.js -封装视图模型并从外部隐藏它们

von4xj4u  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(135)

我遵循this answer上建议的方法来处理多个viewModel,并在页面的不同部分使用它们。
一些视图模型将在页面的多个部分和不同的元素中使用,所以我不喜欢使用the second suggested solution,它建议将视图模型应用于某些DOM元素。
所以我有这样的东西:

window.masterVM = {
    vmA : new VmA(),
    vmB : new VmB(),
    vmC : new VmC(),
}

ko.applyBindings(masterVM, $(':root').get(0));

现在,在我的HTML上,我做了这些事情:

<div data-bind="click: masterVM.vmA.demo">Click</div>
<div data-bind="click: masterVM.vmC.demo">Click</div>

这使得任何想要执行这些方法的人都可以在window对象中访问它,只需执行以下操作:window.masterVM.vmC.demo() .
有没有什么方法可以隐藏它,并以一种从外部无法访问的方式封装它?

lxkprmvk

lxkprmvk1#

不确定这是否是您要查找的对象,但您可以简单地传递一个匿名对象。
例如:
第一个

zynd9foi

zynd9foi2#

masterVM引用的对象 * 是 * 您的视图模型。在绑定的上下文中,您将始终可以通过$root绑定上下文访问根视图模型。
您的绑定可以是:

<div data-bind="click: $root.vmA.demo">Click</div>
<div data-bind="click: $root.vmC.demo">Click</div>

然后你就可以不用使用全局变量了。

相关问题