2012-01-14 51 views
8

ko 2.0ではコンテナレスフローコントロールを使用しています。 observableArray内の項目を更新するとUIが更新されません。私はこのような配列を更新しています:observableArrayを更新してもUIは更新されません

this.editFormHost = function (formHost) { 
    ... 
    formHost.HostName = newHostName; 
    this.formHosts[index] = formHost; 
} 

私は、インデックスによる配列の更新はKOで何かを呼び出すことはありませんので、それは更新されません考えています。 the documentationを見ると、UIを更新するオブジェクトを更新するメソッドがないようです。それとも?

+0

少し難しいの使用を注意してください。開始点として、あなたはこの質問を見たことがありますか?http://stackoverflow.com/questions/8774943/knockoutjs-observablearray-to-update-when-inner-observable-is-changed and this http://stackoverflow.com/questions/6425409/no-to-replace-a-given-index-in-knockoutjs? – saurus

答えて

15

ここでは、observableArray内のアイテムを置き換え、その変更をUIに通知する方法を示すフィドルです。

http://jsfiddle.net/johnpapa/ckMJE/

ここで重要なのは、observableArrayに置き換える機能です。スプライスも使用できます。

は...あなたのviewmodelを見て、あなたがやろうとしているか理解せずに手助けするために、次の「置き換え」...

var ViewModel = function() { 
    this.self = this; 
    self.index = ko.observable(0); // default 
    self.newColor = ko.observable("purple"); // default 
    self.colors = ko.observableArray([{ 
     color: 'red'}, 
    { 
     color: 'blue'}, 
    { 
     color: 'yellow'}]); 
    self.replaceIt = function() { 
     self.colors.replace(self.colors()[self.index()], { 
      color: self.newColor() 
     }); 
    }; 
}; 
ko.applyBindings(new ViewModel()); 
+5

誰かがその置き換えメソッドをドキュメントに追加する必要があります。ありがとう! –

+1

良い点。私はノックアウトコースに追加しました。なぜなら、私はノックアウトコースについて多くの質問をしているからです。 –