2017-04-12 20 views
0

こんにちはみんな観測可能な配列に固定モデルを渡すとKO Observable配列と私のUIに奇妙な問題があります。選択オプションを正しく表示しますが、動的に単純に何も表示しない場合は、最初に動的に選択するオプションを選択していますが、2番目のオプションは機能しません。ここで 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([]);" 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

私はすでにこのコードを実装していますが、私にはエラーが発生します。未定義のプロパティ 'プッシュ'を読み取れません。オブザーバブルarrrayのvar selfを実装しています。 – Kross

+0

は、すでに動作していますが、オブザーバブルでブラケットを追加するだけですが、何か不思議な出来事、self.tipoHabitacion()。push(hab);完璧に動作しますが、self.tipoHuesped()。push(x);このオブジェクトがメインオブジェクト内で初期化されていても要素のエラーを返します – Kross

+0

"未定義のpush 'プロパティを読み取ることができません"というメッセージは、この時点で観測可能な配列が作成されていないことを意味します。 – TSV

0

私はすでにいただきましたすべてのことについての実現、コードはオブジェクトに分離し、実現didn`tのだから私は間違ったオブジェクトにコードの部分を追加しようとしていた!

I m getting started with ko so didnこれについてすべてを実現する! すべてに謝罪!

関連する問題