Knockout.js 使用映射实现ViewModel的最佳方法(使用淘汰)
我想将mapping插件与knockout viewmodel一起使用:Knockout.js 使用映射实现ViewModel的最佳方法(使用淘汰),knockout.js,Knockout.js,我想将mapping插件与knockout viewmodel一起使用: var TasksListViewModel = (function () { var self = this; var GET_PATH = "/Tasks/Index"; self.loadData = function() { $.getJSON(GET_PATH, function (data) { ko.mapping.fromJS(data, {
var TasksListViewModel = (function () {
var self = this;
var GET_PATH = "/Tasks/Index";
self.loadData = function() {
$.getJSON(GET_PATH, function (data) {
ko.mapping.fromJS(data, {}, self);
setSubscribers();
setComputed();
ko.applyBindings(self);
});
};
self.updateData = function() {
$.getJSON(GET_PATH,
{
page: self.Page()
}, function (data) {
ko.mapping.fromJS(data, TasksListViewModel);
});
};
self.setSubscribers = function() {
self.Page.subscribe(function (newPage) {
self.updateData();
});
};
self.setComputed = function () {
self.TotalPages = ko.computed(function () {
return Math.ceil(self.Total() / self.PageSize());
});
}
return self;
}());
但是我只能在映射之后声明订阅者&计算的可观测值。这条路对吗 我个人喜欢这种方法
ViewModel = function(data) {
var mapping = {
myArray: {
create: function(options) {
return new ChildViewModel(options.data);
}
}
};
ko.mapping.fromJS(data, mapping, this);
this.computed = ko.computed(this.getComputed, this);
};
ViewModel.prototype = {
getComputed: function() {
return this.myData() + "computed";
}
};
ChildViewModel = function(data) {
ko.mapping.fromJS(data, {}, this);
};
更新时只需调用
ko.mapping.fromJS(data,mapping,this)
再次发现如何避免setComputed函数,只需为每个ko.computed-self添加两个额外参数&{deferEvaluation:true}