Javascript 无法从一个viewModel更新另一个viewModel的observable
我想从一个viewModel更新另一个viewModel的一个可观察对象。该值已更改,但不反映在UI上(在HTML中) 我不确定代码出了什么问题 代码如下: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
不会更新。您绑定到两个独立的视图模型实例
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"));
现在,两个可观察到的都是同步的。。我发现这比嵌套对象要好得多。。至少它满足了我申请的需要
非常感谢你