Pregunta sobre knockout-mapping-plugin, knockout.js – Mapeo knockout con campos computados

5

Estoy obteniendo datos de un servicio WCF, y asigno y vinculo los datos con mi objeto DOM:

var PayinyVM = {};

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

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

el resultado se muestra como excepción en mi DOM, lo vinculo al modelo. Lo que no pude descubrir es cómo agregar algunos observables computados, digamos que mis datos están devolviendo a las personas con FirstName y LastName, cómo puedo hacer un FullName computable observable con FN + '' + LN.

Tu respuesta

3   la respuesta
4

ternamente.

var PayinyVM = function (data) {
    var self = this;
    ko.mapping.fromJS(data, {}, self);
    this.fullName = ko.computed(function () {
        return self.Name() + " : just ";
    });
};

$.getJSON('/service/PaidService.svc/PaidList', function (data) {    
    ko.applyBindings(new PayinyVM(data.d));
});

Espero que esto ayude.

Además, si desea tratar con matrices de objetos, debe leer los documentos en las opciones del complemento de mapeo. Necesitará un segundo objeto modelo, por ejemplo, PersonVM. madcapnmckay
Pocos problemas con tu violín. Los datos no son válidos json. Pásalo a JSONLint y mira. Falta el nocaut en los recursos. Usted estaba estudiando una propiedad modelo que no existe. Así es como debe ser.jsfiddle.net/madcapnmckay/nWTMf/3 Si está esperando una matriz de objetos, entonces debería recibirse como {arrayName: [..]}, entonces su foreach estaría en arrayName. madcapnmckay
Creo que este es el violín de trabajo ...jsfiddle.net/grimreaper01/caKrR Vyache
var PayinyVM = función (datos) {var self = this; ko.mapping.fromJS (data, {}, self); this.fullName = ko.computed (function () {return self.Name () + ": just";}); }; $ .getJSON ('/ service / PaidService.svc / PaidList', function (data) {var tmp = JSON.stringify (data.d); PayinyVM.model = new PayinyVM (JSON.parse (tmp)); // ko .mapping.fromJSON (tmp); ko.applyBindings (PayinyVM);}); Frenchi In LA
9

tuve que hacer muchas suposiciones ya que su violín ni siquiera era un javascript correcto y parecía bastante confundido y ni siquiera hacía referencia a un nocaut

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)); ​

Y un violín que funciona:http://jsfiddle.net/qeUHd/

Keith lo que está mal con eso. es por eso que lo puse violín para que las personas que saben nocaut lo corrijan. Gracias de cualquier manera Frenchi In LA
cualquier problema va achat.stackoverflow.com/rooms/12181/knockoutjs Keith Nicholas
Gracias Keith, ahora tengo que revisar tu código para entender. Frenchi In LA
Cual codigo es madcapnmckay respuesta. Básicamente, me gustaría saber una vez que asigne un modelo de vista a un dato recibido cómo agregarle algunos campos computados. Gracias Frenchi In LA
2

a dentro de javascript para que la eliminación pueda inicializar el modelo de vista con las propiedades, antes de actualizarlo con los datos del servidor.

Referencia:http://www.underwatergorilladome.com/how-to-use-knockouts-computed-observables-with-the-mapping-plugin/

http://jsfiddle.net/GLDxx/2/

var model = {
    username : ko.observable(),
    get_student_info : ko.mapping.fromJS(
        {
            usr_lname : null,
            usr_fname : null,
            gender : null,
            dob : null
        },
        {
            create: function(options) {
                return (new (function () {
                    this.name = ko.computed(function () {
                        if (this.usr_lname == undefined || this.usr_fname == undefined)
                            return null;
                        else
                            return this.usr_lname() + ' ' + this.usr_fname(); 
                    }, this);

                    // let the ko mapping plugin continue to map out this object, so the rest of it will be observable
                    ko.mapping.fromJS(options.data, {}, this);
                }));
            }
        }
    )
};
Después de haber pasado una hora buscando la respuesta, este ejemplo dejó en claro todo y ahora tengo lo que quiero que funcione :) carbontwelve

Preguntas relacionadas