处理来自服务器的复杂数据的列表使用Knockout mapping plugin最简单的方法。
使用动态data-x
HTML属性无视Knockout的目的,即用数据填充静态 HTML(模板)。改为使用Ajax从服务器请求数据模型。
function CarViewModel(data) {
var self = this,
loaded = new Date();
ko.mapping.fromJS(data, {}, self);
self.displayName = ko.computed(function() {
return [data.color, data.year, data.make, data.model].join(" ");
});
}
function CarListViewModel() {
var self = this;
self.cars = ko.observableArray();
self.load = function() {
$.get("cars.json")
.then(function (data) {
var carMapping = {
key: function (data) {
return ko.utils.unwrapObservable(data.id);
},
create: function (options) {
return new CarViewModel(options.data);
}
};
ko.mapping.fromJS(data, carMapping, self.cars);
});
};
}
ko.applyBindings(new CarListViewModel());
(请注意,这取决于例如jQuery的为Ajax请求。)
看到这个捣鼓演示/解释:http://jsfiddle.net/Tomalak/Pbh6S/
您可能也有兴趣在一个类似的答案我之前写道:dynamic column and rows with knockoutjs
嘿lagerone,谢谢我只是花了一点时间自己,并提出了完全相同的解决方案,所以这些鼓励,我喜欢这种混合,因为我d不想使用AJAX获取最初的数据 – Baconbeastnz 2013-05-07 07:18:30