En mi ejemplo específico, hay varios widgets que tienen su propio encapsulado ViewModel. Necesito un mundial botón Guardar guarda cada individuo ViewModel. Me parece que no puede averiguar cómo llamar a funciones en el individuo ViewModels.

Ejemplo – ¿cómo puedo llamar a la función Guardar en cada Perspective: http://jsfiddle.net/sNSh2/4/

var ViewModel1 = function() {
    var self = this;
    self.firstName = ko.observable('');
    self.lastName = ko.observable('');

    self.firstName('John');
    self.lastName('Doe');

    self.Save = function () {
        alert(ko.toJSON(self));
    };
};
ko.applyBindings(new ViewModel1(), document.getElementById("person"));

var ViewModel2 = function() {
    var self = this;
    self.subscriptionLevel = ko.observable('');

    self.subscriptionLevel('premier');

    self.Save = function () {
        alert(ko.toJSON(self));
    };
};
ko.applyBindings(new ViewModel2(), document.getElementById("subscription"));

$('#save').on('click', function() {

});

OriginalEl autor Mike Cole | 2014-03-18

3 Comentarios

  1. 14

    No entiendo tu problema, ¿por qué no simplemente mantener una referencia de su modelo de objeto?

    $(function() {
      ...
      var m1 = new ViewModel1();
      ko.applyBindings(m1, document.getElementById("person"));
    
      ...
      var m2 = new ViewModel2();
      ko.applyBindings(m2, document.getElementById("subscription"));
    
      $('#save').on('click', function() {
        m1.Save();
        m2.Save();
      });
    });

    Si realmente tiene problemas para obtener referencias de todos los objetos de modelo (tal vez definido en aislados de ficheros js), ko proporcionado manera de conseguir contexto objeto de objeto DOM asociado. Usted todavía puede hacer esto:

    ko.contextFor(document.getElementById("person")).$data.Save();
    ko.contextFor(document.getElementById("subscription")).$data.Save();
    ko.contextFor es exactamente lo que estaba buscando. Gracias!
    ko.applyBindings() devuelve undefined en octavos de final 3.2 y 3.3, lo que hace imposible llevar a cabo una referencia para el modelo de vista. Algunos ejemplos de los oficiales de la documentación son, por tanto, roto. Alguna idea de por qué?
    No entiendo tu problema. Nadie usa el valor de retorno de ko.applyBindings(...). Por favor, pon un jsfiddle para mostrar el código.

    OriginalEl autor huocp

  2. 1

    Knockout básica pub/sub funcionalidad. prueba de esto en el tamaño de jsFiddle

    var postbox = ko.observable();
    
    var ViewModel1 = function() {
        var self = this;
        self.firstName = ko.observable('');
        self.lastName = ko.observable('');
    
        self.firstName('John');
        self.lastName('Doe');
    
        self.Save = function () {
            alert(ko.toJSON(self));
        };
        postbox.subscribe(function(newValue){
            self.Save();
        }, self, 'save');
    };
    ko.applyBindings(new ViewModel1(), document.getElementById("person"));
    
    var ViewModel2 = function() {
        var self = this;
        self.subscriptionLevel = ko.observable('');
    
        self.subscriptionLevel('premier');
    
        self.Save = function () {
            alert(ko.toJSON(self));
        };
    
        postbox.subscribe(function(newValue){
            self.Save();
        }, self, 'save');
    };
    ko.applyBindings(new ViewModel2(), document.getElementById("subscription"));
    
    $('#save').on('click', function() {
        postbox.notifySubscribers(null, "save");
    });
    Esencialmente, la página tiene una amplia vista del modelo, que tiene el postbox observable.
    básicamente, sí, eso es correcto.

    OriginalEl autor Nathan Fisher

  3. 0

    Sólo necesita crear una instancia de su ViewModel1 y ViewModel2 funciones:

    $('#save').on('click', function() {
       var vm1 = new ViewModel1(),
           vm2 = new ViewModel2();
    
       vm1.SayHi();
       vm2.SayHi();
    });
    Disculpas, mi ejemplo no era realmente la captura de lo que yo estaba tratando de hacer. He actualizado mi pregunta. Cuando me instancias de nuevas versiones de los ViewModels voy a perder el estado de la existente ViewModels.

    OriginalEl autor Tuan

Dejar respuesta

Please enter your comment!
Please enter your name here