我正在尝试对代码进行模块化,因此出现了一种情况,我想将一个视图模型中的可观察对象传递给第二个视图模型,并在第二个视图模型的上下文中绑定该可观察对象。
我大致拥有的是:
var ModelA = function () {
var self=this;
self.model_b = new ModelB();
self.my_variable = ko.observable();
self.model_b(self.my_observable);
};
var ModelB = function () {
var self=this;
function passObservable( passed_observable ) {
self.received_variable = observable;
}
};
ko.applyBindings(new ModelA());
然后在视图中,我想使用data-bind='text: model_b.received_variable'
==========跟进=========
一种建议的解决方案是具有两个独立的可观察对象,每个视图模型中的一个,然后使用四个观察者组合模式同步这两个可观察对象,这可以使用KO的可预订对象来实现。当我只想要两个可观察对象时,感觉不必要的沉重,然后需要添加代码以使这两个对象彼此通信。
答案 0 :(得分:2)
我不太确定这是否是您想要的方式,但是我将按照以下方式创建结构---
使用“ with”绑定来创建任何对象的上下文,然后您可以访问对象内部的任何属性以直接绑定。
var ModelA = function () {
var self=this;
self.my_variable = ko.observable("val");
self.model_b = new ModelB();
self.model_b.setObservable(self.my_variable());// use '()' if you want to pass value OR simply use self.my_variable to pass observable ref.
};
var ModelB = function () {
var self=this;
self.received_variable;
self.setObservable = function(passed_observable) {
self.received_variable = passed_observable;
}
};
ko.applyBindings(new ModelA())
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- ko with:model_b -->
<span data-bind="text:received_variable"></span>
<!-- /ko -->