2017-04-12 2 views
0

Hallo Jungs Erkennung ich ein seltsames Problem mit KO beobachtbare Array haben und meine UI, wenn ich dieses ein festes Modell meiner beobachtbaren Array übergeben funktioniert! und zeige die Auswahloptionen korrekt an, aber wenn man diese dynamisch macht, zeige einfach nichts an, ich habe bereits eine erste Option gewählt, um dynamisch zu arbeiten und es funktioniert perfekt !, aber die zweite Option funktioniert einfach nicht.UI nicht beobachtbar Array

Hier sind der Code meines Modells für die Optionen

var TipoModel = function(data) { 
    var self = this; 
    self.id = ko.observable(data.id); 
    self.name = ko.observable(data.name); 
}; 

var HabitacionModel = function(Huespedes) { 
... 
self.loadRoomsType = function() { 
    ajax("/api/foro/loadrooms", {}, function(data) { 

     self.tipoHabitacion = ko.observableArray([]); 
     $.each(data, function(index, habitacion) { 
      var hab = new TipoModel({ 
       id: habitacion.id, 
       name: habitacion.nombreHabitacion 
      }); 
      self.tipoHabitacion.push(hab); 
     }); 
    }, "GET"); 
    console.log(self.tipoHabitacion()); 
} 
self.loadpartnersType = function() { 
    ajax("/api/foro/loadpartners", {}, function(data) { 
     var self = this; 
     self.tipoHuesped = ko.observableArray([]); 
     $.each(data, function(index, socio) { 

      var x = new TipoModel({ 
       id: socio.id, 
       name: socio.nombre 
      }); 

      self.tipoHuesped.push(x); 
     }); 
     console.log(self.tipoHuesped()); 

    }, "GET"); 
} 

die Last Räume, aber die Meldung parters Funktion funktioniert nicht und ist der gleiche Code nur ein paar Änderungen, aber es ist das gleiche.

<select style="width:30%; height:100%; margin-top:4px; background-color:transparent; border-color:#729A2B;" data-bind="options: tipoHuesped, 
         value: selectedHuesped, 
         optionsText: 'name', 
         optionsValue: 'id', 
         optionsCaption: 'Escoge...'" required></select> 

wenn ich so die beobachtbare Array von Anfang definieren funktioniert es

self.tipoHuesped = ko.observableArray([ 
    new TipoModel({ 
     id: "1", 
     name: "Aeroméxico" 
    }), 
    new TipoModel({ 
     id: "2", 
     name: "Magnicharters" 
    }) 
]); 

i diese dynamisch weitere Daten bald hinzugefügt werden dazu führen, machen wollen, hoffen, dass u mir Jungs helfen kann. Dank

+0

"self.tipoHabitacion ko.observableArray = ([]);" sollte nicht im Ajax Callback sein - Sie erstellen eine neue Instanz des ObservableArray, aber Markup ist bereits an das vorherige gebunden. – TSV

+0

das gleiche ist mit "self.tipoHuessped = ko.observableArray ([]);" – TSV

Antwort

2

"self.tipoHabitacion = ko.observableArray ([]);" sollte nicht im Ajax Callback sein - Sie erstellen eine neue Instanz des ObservableArray, aber Markup ist bereits an das vorherige gebunden.

So sollten Sie Observablen erstellen, sobald eine Zeit, und dann hinzufügen oder entfernen Artikel zu/von ihnen:

var TipoModel = function(data) { 
    var self = this; 
    self.id = ko.observable(data.id); 
    self.name = ko.observable(data.name); 
}; 

var HabitacionModel = function(Huespedes) { 
... 
self.tipoHabitacion = ko.observableArray([]); 
self.tipoHuesped = ko.observableArray([]); 
self.loadRoomsType = function() { 
    ajax("/api/foro/loadrooms", {}, function(data) { 

     self.tipoHabitacion.removeAll(); 
     $.each(data, function(index, habitacion) { 
      var hab = new TipoModel({ 
       id: habitacion.id, 
       name: habitacion.nombreHabitacion 
      }); 
      self.tipoHabitacion.push(hab); 
     }); 
    }, "GET"); 
    console.log(self.tipoHabitacion()); 
} 
self.loadpartnersType = function() { 
    ajax("/api/foro/loadpartners", {}, function(data) { 
     var self = this; 
     self.tipoHuesped.removeAll(); 
     $.each(data, function(index, socio) { 

      var x = new TipoModel({ 
       id: socio.id, 
       name: socio.nombre 
      }); 

      self.tipoHuesped.push(x); 
     }); 
     console.log(self.tipoHuesped()); 

    }, "GET"); 
} 
+0

ich implementiere bereits diesen Code, aber es gibt mir einen Fehler von Kann nicht lesen property 'push' von undefined, ich implementiere die var selbst für die Observablen arrray, mache ich etwas falsch? – Kross

+0

funktioniert bereits nur eine Klammer in der beobachtbaren, aber etwas Kurioses passiert, self.tipoHabitacion(). Push (hab); funktioniert perfekt, aber self.tipoHuesped(). push (x); ein Fehler von Element zurückgibt nicht gefunden, auch dieser seine in dem Hauptobjekt initialisiert – Kross

+0

Meldung „Eigenschaft‚Push‘undefinierter nicht lesen“ bedeutet, dass beobachtbare Array wird in diesem Moment nicht erstellt - Ihre Funktion aufgerufen wird, bevor Array initialisiert wird. – TSV

0

i schon erkennen, was alles über sie, didn `t der Code erkennen, wurde in Objekten getrennt, Also habe ich versucht, den Code an das falsche Objekt anzuhängen!

ich m getting started with ko so didn t über all dies realisieren! Entschuldigung an alle!

Verwandte Themen