例如,我有以下型号:
var Volume = function (id, path, isactive) {
var self = this;
self.id = ko.observable(id);
self.path = ko.observable(path);
self.isactive = ko.observable(isactive);
self.Save = function (data) {
//ajax post
}
self.Update = function (data) {
//ajax post
}
}
var ViewModel = function (data) {
var self = this;
self.volumes = ko.observableArray(data.volumes.map(function (item) {
return new Volume(item.id, item.path, item.isActive, item.description);
}));
self.AddVolume = function () {
self.volumes.push(new Volume());
}
}
保存或更新后,我想从卷模型刷新父ViewModel,因为数据库中的某些值已更改。
如何重新初始化ViewModel?
var viewModel = new ViewModel(ko.utils.parseJson(data) || []);
ko.applyBindings(viewModel);
答案 0 :(得分:1)
您可以在父模型中使用一个函数来加载新数据并填充新数据。然后,您需要获取新数据的任何地方,您只需调用该函数。
示例:
var Volume = function (data) {
var self = this;
self.id = ko.observable(data.id);
self.path = ko.observable(data.path);
self.isactive = ko.observable(data.isactive);
self.Save = function (data) {
//ajax post
//whenever you want to load data again you call viewModel.Load();
}
self.Update = function (data) {
//ajax post
//whenever you want to load data again you call viewModel.Load();
}
}
var ViewModel = function () {
var self = this;
self.volumes = ko.observableArray();
self.Load = function (){
//your ajax call or whatever you do to get the data
self.volumes($.map(data.volumes, function (item) {
return new Volume(item);
}
}
self.AddVolume = function () {
obj = {id:"",path:"",isactive:false}
// need to pass data to Volume model
self.volumes.push(new Volume(obj));
}
}
var viewModel = new ViewModel();
viewModel.Load();
ko.applyBindings(viewModel);
我建议您在父模型中使用save
和update
函数,并使用$parent
数组对象进行引用。
答案 1 :(得分:0)
我认为您不需要刷新父vm,如果需要,可以从更新后的值更改数组的特定索引。或者在清除数组中的旧值后调用getall方法并推送所有值(但不推荐)。或者您可以刷新页面。明智地选择