2017-04-12 61 views
0

嗨,大家好我有一個奇怪的問題與KO Observable數組和我的用戶界面,如果我通過一個固定的模型,我可觀察的數組這個工程!並顯示正確的選擇選項,但如果使這一個動態只是不顯示任何東西,我已經做了第一個選擇動態工作的選項,它的工作完美!,但第二個選項根本不起作用。用戶界面沒有檢測到可觀察的數組

這裏是我的模型的代碼的選項

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"); 
} 

的房間裏工作負載,但parters功能不能正常使用的是相同的代碼只有少數的變化,但它是相同的。

<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> 

如果我從一開始就這樣定義陣列觀測到它的工作原理

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

我想使這一動態引起更多的數據即將加入,希望u能幫助我的傢伙。 謝謝

+0

「self.tipoHabitacion = ko.observableArray([]);」不應該在ajax回調中 - 你創建了一個observableArray的新實例,但是標記綁定到前一個。 – TSV

+0

同樣的事情是與「self.tipoHuesped = ko.observableArray([]);」 – TSV

回答

2

「self.tipoHabitacion = ko.observableArray([]);」不應該在ajax回調中 - 你創建了一個observableArray的新實例,但是標記綁定到前一個。

所以,你應該建立觀測一次時間,然後從它們添加或刪除項目/:

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

我已經實現了這個代碼,但它給了我一個錯誤,無法讀取未定義的屬性「推」,我實現了var self觀察對象arrray,我做錯了什麼? – Kross

+0

已經有效,只能在observable中添加一個括號,但有些好奇的事情,self.tipoHabitacion()。push(hab);完美的作品,但self.tipoHuesped()。push(x);返回一個未找到的元素的錯誤,即使它在主對象 – Kross

+0

中被初始化也沒有找到。「無法讀取未定義的屬性'push'意味着此時不創建可觀察數組 - 在你初始化數組之前調用了你的函數。 – TSV

0

我已經意識到什麼有關它的一切,didn`t實現代碼中的對象進行分離,所以我試圖將這段代碼追加到錯誤的對象上!

m getting started with ko so didn瞭解這一切!向所有人道歉!