Search code examples
knockout.jsknockout-mapping-plugin

knockout mapping with computed fields


I'm getting data from a WCF service,and i map, and bind the data with my DOM object :

var PayinyVM = {};

    $.getJSON('/service/PaidService.svc/PaidList', function (data) {
        var tmp = JSON.stringify(data.d);

        PayinyVM.model = ko.mapping.fromJSON(tmp);
        ko.applyBindings(PayinyVM);
    }); 

the result is shown as excepted on my DOM bind it to model. What I couldn't find out is how to add some computed observable let's say my data is returning people with FirstName and LastName, how can I make a computed observable FullName with FN + ' ' + LN.


Solution

  • Here's a working copy of your fiddle, I had to make a lot of assumptions as your fiddle wasn't even correct javascript and seemed quite confused and didn't even reference knockout

    var PaidPeople = function(data) {
        var self = this;
        ko.mapping.fromJS(data, {}, this);
        this.fullName = ko.computed(function () {
                        return self.Name() + " : just ";
                    });
    }
    
    var PayinyVM = function (data) {
                    var self = this;
    
                    ko.mapping.fromJS(data, {
                        'model' : {
                            create: function(options) {
                                return new PaidPeople(options.data);
                        }                        
                      }
                    }, self);                
                };
    
    var data = {model:[{__type: "PaidPeople:#model", Amount:110, Attendee:1, Name:'John'}]};
    
    ko.applyBindings(new PayinyVM(data)); ​
    

    and a fiddle that works : http://jsfiddle.net/qeUHd/