2017-04-12 2 views
0

안녕하세요 여러분, 관찰 가능한 배열에 고정 된 모델을 전달하면 KO Observable 배열과 UI가 이상하게 생깁니다. 선택 옵션을 올바르게 보여 주지만, 동적으로 단순히 아무것도 보이지 않게하려면 동적으로 작동하는 첫 번째 선택 옵션을 만들었고 완벽하게 작동합니다. 그러나 두 번째 옵션은 작동하지 않습니다. 여기 UI가 관찰 가능한 배열을 감지하지 못합니다.

는 옵션

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> 

은 내가이 동적으로 더 많은 데이터가 곧 추가 될 예정의 원인이 만들고 싶어 u는 나에게 사람들을 도울 수 있기를 바랍니다

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

작동합니다. 감사합니다.

+0

"self.tipoHabitacion = ko.observableArray ([]);" 아약스 콜백 안에 있으면 안된다. observableArray의 새로운 인스턴스를 만들지 만, 마크 업은 이전에 바인딩되어있다. – TSV

+0

동일한 것은 "self.tipoHuesped = ko.observableArray ([]);"입니다. – TSV

답변

2

"self.tipoHabitacion = ko.observableArray ([]);" 아약스 콜백 안에 있으면 안된다. observableArray의 새로운 인스턴스를 만들지 만, 마크 업은 이전에 바인딩되어있다. 모든 그것에 대해, 돌아가신`t 코드가 객체에서 분리 실현 무슨

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

나는이 코드를 이미 구현했다. 그러나 그것은 나에게 오류를 준다. 정의되지 않은 'push'속성을 읽을 수 없다. observables arrray에 대해 var 자체를 구현한다. 잘못된 것을하고 있는가? – Kross

+0

이미 관찰 할 수 있지만 뭔가 호기심 happend, self.tipoHabitacion() 괄호 추가 할 작동합니다. push (hab); 완벽하게 작동하지만 self.tipoHuesped(). push (x); 이 객체가 주 객체에서 초기화되었다고해도 오류가없는 요소를 반환합니다. – Kross

+0

"undefined의 push '속성을 읽지 못했습니다."라는 메시지는 현재 관찰 가능한 배열이 만들어지지 않았 음을 의미합니다. 배열이 초기화되기 전에 함수가 호출됩니다. – TSV

0

은 이미 실현 :

그래서 한 번 시간을 관찰 가능한를 만든 다음 그들로/항목을 추가하거나 제거해야 그래서 나는 잘못된 객체에 코드 조각을 추가하려고 시도했다.

I m getting started with ko so didn이 모든 것을 알 수 있습니다! 모두에게 사과!