處理來自服務器的複雜數據的列表使用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