我有三个文件。在第一个文件中,定义了数据结构或对象,我想在其中保留一些值。
1.File
....
function DataTO(){
...
this.object = ko.observable();
...
}
然后我有第二个文件,在其中创建了DataTO实例,并将该实例发送到第三个文件。
2.File
//here is created the object of DataTO instance.
sendToThirdFile(dataTO().object);
在最后一个文件中,我接收到对象参数,该参数是DataTO对象中称为对象的属性。
3.File
function(object){
this.computedValue = ko.observable(value);
//here I need to set computedValue to object.
this.object = object;
}
问题是,它不起作用。有什么方法可以始终随着calculatedValue的更改来更改对象的值吗?那么更改将出现在第二个文件中吗?
答案 0 :(得分:0)
这可能是您问题的相当间接的答案。但是我不得不整理几次以分解出一个大型的淘汰表视图模型。这是到目前为止我提出的最好的解决方案。
免责声明:对不起,语法有点混乱,如今许多淘汰赛项目可能有点遗留,我使用es6和较旧代码的混搭来使本文花费的时间不会太长。
viewModelLoader.js-加载所有依赖项,创建一个可传递给每个文件的全局可预订项,在加载所有依赖项后,它将所有代码捆绑到主viewmodel中。
viewmodelController.js-初始化您要准备放入ViewModel的代码,就像创建该层一样,这样我就可以轻松地处理加载顺序。
fileA,fileB-将代码放入其中的文件。
/*
viewModelLoader.js (index.js)
*/
import VMC from './viewmodelController';
import fileA from './fileA';
import fileB from './fileB’;
var viewModelLoader = {
init: function() {
var shouter = new ko.subscribable();
VMC.viewmodelController(fileA, fileB);
ko.applyBindings({
MyViewModel : new viewmodelController.MyViewModel()
});
}
);
viewModelLoader.init();
/*
viewmodelController.js
*/
export default {
viewmodelController: function(fileA, fileB) {
this.MyViewModel = function() {
var self = this;
// do stuff
fileA.init(self);
fileB.init(self);
// do stuff
}
}
}
/*
fileA.js
*/
export default {
init: function(self) {
/*
knockout stuff, define some variables / observables
*/
}
}
/*
fileB.js
*/
export default {
init: function(self) {
/*
knockout stuff, do some stuff the variables
*/
}
}
以下是使用requirejs的该想法的较旧版本,您可以查看以查看有效的示例https://github.com/digital-pollution/ko-demo