Javascript 无法从一个viewModel更新另一个viewModel的observable

Javascript 无法从一个viewModel更新另一个viewModel的observable,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我想从一个viewModel更新另一个viewModel的一个可观察对象。该值已更改,但不反映在UI上(在HTML中) 我不确定代码出了什么问题 代码如下: 不会更新。您绑定到两个独立的视图模型实例 ko.applyBindings(new viewModel1(), document.getElementById("firstViewModel")); ko.applyBindings(new viewModel2(), document.getElementById("secondVi

我想从一个viewModel更新另一个viewModel的一个可观察对象。该值已更改,但不反映在UI上(在HTML中)

我不确定代码出了什么问题

代码如下:


不会更新。

您绑定到两个独立的视图模型实例

ko.applyBindings(new viewModel1(), document.getElementById("firstViewModel"));
ko.applyBindings(new viewModel2(), document.getElementById("secondViewModel"));
因此,您的
viewModel1
viewModel2
之间没有连接,当您在
viewModel1
中编写时:

var vm2Object = new viewModel2();
然后您将创建一个全新的
viewModel2
实例,该实例与
applyBindings
中使用的实例无关

要解决此问题,您需要在视图模型之间建立连接,某种程度上类似于此(还有多种其他方法,如使用容器视图模型、将视图模型彼此嵌套等):

调用
applyBindings
时:

var vm2 = new viewModel2();
ko.applyBindings(new viewModel1(vm2), document.getElementById("firstViewModel"));
ko.applyBindings(vm2, document.getElementById("secondViewModel"));

演示。

您将绑定到两个独立的视图模型实例

ko.applyBindings(new viewModel1(), document.getElementById("firstViewModel"));
ko.applyBindings(new viewModel2(), document.getElementById("secondViewModel"));
因此,您的
viewModel1
viewModel2
之间没有连接,当您在
viewModel1
中编写时:

var vm2Object = new viewModel2();
然后您将创建一个全新的
viewModel2
实例,该实例与
applyBindings
中使用的实例无关

要解决此问题,您需要在视图模型之间建立连接,某种程度上类似于此(还有多种其他方法,如使用容器视图模型、将视图模型彼此嵌套等):

调用
applyBindings
时:

var vm2 = new viewModel2();
ko.applyBindings(new viewModel1(vm2), document.getElementById("firstViewModel"));
ko.applyBindings(vm2, document.getElementById("secondViewModel"));

演示。

您将绑定到两个独立的视图模型实例

ko.applyBindings(new viewModel1(), document.getElementById("firstViewModel"));
ko.applyBindings(new viewModel2(), document.getElementById("secondViewModel"));
因此,您的
viewModel1
viewModel2
之间没有连接,当您在
viewModel1
中编写时:

var vm2Object = new viewModel2();
然后您将创建一个全新的
viewModel2
实例,该实例与
applyBindings
中使用的实例无关

要解决此问题,您需要在视图模型之间建立连接,某种程度上类似于此(还有多种其他方法,如使用容器视图模型、将视图模型彼此嵌套等):

调用
applyBindings
时:

var vm2 = new viewModel2();
ko.applyBindings(new viewModel1(vm2), document.getElementById("firstViewModel"));
ko.applyBindings(vm2, document.getElementById("secondViewModel"));

演示。

您将绑定到两个独立的视图模型实例

ko.applyBindings(new viewModel1(), document.getElementById("firstViewModel"));
ko.applyBindings(new viewModel2(), document.getElementById("secondViewModel"));
因此,您的
viewModel1
viewModel2
之间没有连接,当您在
viewModel1
中编写时:

var vm2Object = new viewModel2();
然后您将创建一个全新的
viewModel2
实例,该实例与
applyBindings
中使用的实例无关

要解决此问题,您需要在视图模型之间建立连接,某种程度上类似于此(还有多种其他方法,如使用容器视图模型、将视图模型彼此嵌套等):

调用
applyBindings
时:

var vm2 = new viewModel2();
ko.applyBindings(new viewModel1(vm2), document.getElementById("firstViewModel"));
ko.applyBindings(vm2, document.getElementById("secondViewModel"));

演示。

您有两个不同的VM2 ViewModel实例。取而代之的是

我已经使VM2成为VM1的子模型

this.vm2Object = new viewModel2();

您有两个不同的VM2 ViewModel实例。取而代之的是

我已经使VM2成为VM1的子模型

this.vm2Object = new viewModel2();

您有两个不同的VM2 ViewModel实例。取而代之的是

我已经使VM2成为VM1的子模型

this.vm2Object = new viewModel2();

您有两个不同的VM2 ViewModel实例。取而代之的是

我已经使VM2成为VM1的子模型

this.vm2Object = new viewModel2();

我尝试了你所有的方法,出于某种原因,它们并没有真正与我的解决方案一起工作

在大量的谷歌搜索和深入挖掘KnockoutJS文档和扩展之后,我发现了Knockout Postbox,它允许我们在多个不相关的视图模型之间进行同步或通信

下面是我的演示示例的一个片段

var viewModel1 = function(){
   var _self = this;
   _self.name = ko.observable("Rahul").syncWith("syncedName");
}

var viewModel2 = function(){
   var _self = this;
   _self.firstName = ko.observable("Rahul").syncWith("syncedName");

}

ko.applyBindings(new viewModel1(), document.getElementById("div1"));
ko.applyBindings(new viewModel1(), document.getElementById("div2"));
现在,两个可观察到的都是同步的。。我发现这比嵌套对象要好得多。。至少它满足了我申请的需要

无论如何,非常感谢你的帮助

我的演示:JSFiddle:

我希望这有帮助

非常感谢你


拉胡尔·帕蒂尔

我尝试了你所有的方法,但出于某种原因,它们与我的解决方案并不完全一致

在大量的谷歌搜索和深入挖掘KnockoutJS文档和扩展之后,我发现了Knockout Postbox,它允许我们在多个不相关的视图模型之间进行同步或通信

下面是我的演示示例的一个片段

var viewModel1 = function(){
   var _self = this;
   _self.name = ko.observable("Rahul").syncWith("syncedName");
}

var viewModel2 = function(){
   var _self = this;
   _self.firstName = ko.observable("Rahul").syncWith("syncedName");

}

ko.applyBindings(new viewModel1(), document.getElementById("div1"));
ko.applyBindings(new viewModel1(), document.getElementById("div2"));
现在,两个可观察到的都是同步的。。我发现这比嵌套对象要好得多。。至少它满足了我申请的需要

无论如何,非常感谢你的帮助

我的演示:JSFiddle:

我希望这有帮助

非常感谢你


拉胡尔·帕蒂尔

我尝试了你所有的方法,但出于某种原因,它们与我的解决方案并不完全一致

在大量的谷歌搜索和深入挖掘KnockoutJS文档和扩展之后,我发现了Knockout Postbox,它允许我们在多个不相关的视图模型之间进行同步或通信

下面是我的演示示例的一个片段

var viewModel1 = function(){
   var _self = this;
   _self.name = ko.observable("Rahul").syncWith("syncedName");
}

var viewModel2 = function(){
   var _self = this;
   _self.firstName = ko.observable("Rahul").syncWith("syncedName");

}

ko.applyBindings(new viewModel1(), document.getElementById("div1"));
ko.applyBindings(new viewModel1(), document.getElementById("div2"));
现在,两个可观察到的都是同步的。。我发现这比嵌套对象要好得多。。至少它满足了我申请的需要

无论如何,非常感谢你的帮助

我的演示:JSFiddle:

我希望这有帮助

非常感谢你


拉胡尔·帕蒂尔

我尝试了你所有的方法,但出于某种原因,它们与我的解决方案并不完全一致

在大量的谷歌搜索和深入挖掘KnockoutJS文档和扩展之后,我发现了Knockout Postbox,它允许我们在多个不相关的视图模型之间进行同步或通信

下面是我的演示示例的一个片段

var viewModel1 = function(){
   var _self = this;
   _self.name = ko.observable("Rahul").syncWith("syncedName");
}

var viewModel2 = function(){
   var _self = this;
   _self.firstName = ko.observable("Rahul").syncWith("syncedName");

}

ko.applyBindings(new viewModel1(), document.getElementById("div1"));
ko.applyBindings(new viewModel1(), document.getElementById("div2"));
现在,两个可观察到的都是同步的。。我发现这比嵌套对象要好得多。。至少它满足了我申请的需要

非常感谢你