【发布时间】:2013-08-29 11:26:56
【问题描述】:
我有一个设置为使用淘汰赛的 javascript 视图模型,并且我在该视图模型中有两个视图模型,我在我的页面上下文中具有数据绑定。 所以我设置了我的页面,以便一个视图模型通过“with”绑定绑定到我的页面的一部分,然后另一个视图模型通过“with”绑定绑定到另一个部分。 现在我已经设置好了,以便在单击事件之后页面上的一个项目绑定到 $root(容器视图模型),并且我想在另一个视图模型上编辑一些可观察对象(不在本节我有“with”绑定的页面)。在我调用的“root”方法中,我将其设置为“var self = this”,然后编辑我需要在另一个视图模型上编辑的属性。问题是我的问题是,当我在“with”绑定中调用 $root 或 $parent 时,该方法的范围从我想要操作的原始对象(本例中的容器或“root”)更改为作为具有“with”绑定的视图模型,因此它没有我需要的任何变量或我需要操作的其他视图模型。
有没有办法将我的范围从 $parent 或 $root 调用更改为我目前得到的范围之外的其他内容?我只希望范围是容器对象的范围,而不是特定的视图模型。
代码示例(在 TypeScript 中):
class Container
{
viewModelA = new ViewModel();
viewModelB = new ViewModelB();
clickMe(){
var self = this;
console.log(self);
self.viewModelB.property("yes");
}
}
<span data-bind="with: viewModelA"> <button data-bind="event: {click: $root.clickMe}" /></span>
console.log 将输出 viewModelA,我会在调用 self.viewModelB 时收到错误。
【问题讨论】:
标签: javascript mvvm knockout.js typescript