私はこれを機能させようとしていますが、正しいことをしていません。私はノックアウトを使用しており、json 応答を取得してチェックアウト カートにマッピングしています。私ができないのは、製品価格の合計を追加する関数を追加することです。私がやろうとしていることのアイデアについては、以下を参照してください。
完全なフィドルはこちら.. http://jsfiddle.net/justayles/Jeaua/26/
var jsonCart = {
"globalshipping": 1.00,
"globaltax": 5.00,
"productitem": [
{
"img": '/Content/img/notavailable.jpg',
"produrl": 'http://www.google.com',
"prodtitle": 'Product1',
"opt1": 'colour',
"opt2": 'size',
"qty": 3,
"unitprice": 10.00,
"shippingcost": 0.00,
"like": true,
"likediscount": 10,
"taxable": true
},
{
"img": '/Content/img/notavailable.jpg',
"produrl": 'http://www.google.com',
"prodtitle": 'Product1',
"opt1": 'colour',
"opt2": 'size',
"qty": 1,
"unitprice": 33.00,
"shippingcost": 0.00,
"like": false,
"likediscount": 0,
"taxable": false
},
{
"img": '/Content/img/notavailable.jpg',
"produrl": 'http://www.yahoo.com',
"prodtitle": 'Product1',
"opt1": 'colour',
"opt2": 'size',
"qty": 5,
"unitprice": 21.00,
"shippingcost": 0.00,
"like": true,
"likediscount": 10,
"taxable": true
}
]
};
var mappingOptions = {
'productitem': {
// overriding the default creation / initialization code
create: function (options) {
return (new (function () {
// setup the computed binding
this.calcPrice = ko.computed(function () {
return this.unitprice() * this.qty();
}, this);
ko.mapping.fromJS(options.data, {}, this);
})(/* call the ctor here */));
}
}
};
var viewModel = ko.mapping.fromJS(jsonCart, mappingOptions );
viewModel.grandTotal = ko.computed(function() {
var result = 0;
ko.utils.arrayForEach(this.productitem, function(item) {
result += item.calcPrice;
});
return result;
}, viewModel);
console.log(viewModel);
ko.applyBindings(viewModel);