title: knockout.js - mapping plugin - how to add ko.computed function
body: <p>I am trying to get this to work but am not doing something right.
  I am using knockout, taking a json response and mapping it for a checkout cart, what I am not able to do is add a function after to add the sum of the product prices. see below for an idea of what I am trying to do, </p>
  
  <p>full fiddle is here.. <a href="http://jsfiddle.net/justayles/Jeaua/26/" rel="nofollow">http://jsfiddle.net/justayles/Jeaua/26/</a></p>
  
  <pre><code>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);
  </code></pre>