处理来自服务器的复杂数据列表的最简单方法是使用Knockout 映射插件。
使用动态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/
您可能还对我之前写的类似答案感兴趣:动态列和行与敲除js