このようにすることができます (Fiddles は chrome では動作しません)。
http://jsfiddle.net/P9LLL/1/
function ReservationsViewModel(data) {
this.kits = ko.observableArray();
ko.mapping.fromJS(data, {}, this);
}
var jsonDataFromBackend = { kits: [{ itemName: "Item1", defaultQuantity: 10 },{ itemName: "Item2", defaultQuantity: 12 } ] };
ko.applyBindings(new ReservationsViewModel(jsonDataFromBackend));
これにより、キット内の各アイテムの動的タイプが作成されます。これらに計算された関数やその他の関数を適切な方法で追加することはできません。代わりに、
http://jsfiddle.net/P9LLL/2/
function SeatReservation(data) {
ko.mapping.fromJS(data, {}, this);
this.total = ko.computed(function() {
return this.price() * this.defaultQuantity();
}, this);
}
function ReservationsViewModel(data) {
this.kits = ko.observableArray();
var mapping = {
kits: {
create: function(options) {
return new SeatReservation(options.data);
}
}
};
ko.mapping.fromJS(data, mapping, this);
}
var jsonDataFromBackend = { kits: [{ itemName: "Item1", defaultQuantity: 10, price: 2 },{ itemName: "Item2", defaultQuantity: 12, price: 5 } ] };
ko.applyBindings(new ReservationsViewModel(jsonDataFromBackend));