2012-01-14 6 views
8

Ko 2.0'da kapsayıcı akış denetimi kullanıyorum. GözlemlenebilirArray'ımdaki bir öğeyi güncellediğimde UI güncellenmiyor. Böyle diziyi güncelleştiriyorum: Ben dizine göre dizi güncelleme ko şey çağırmaz çünkü güncelleme gelmez düşünüyorumGözlemlenebilirArray güncelleştirmesi UI'yi güncelleştirmiyor

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

. the documentation'a bakmadan, UI'yi güncellemek için bir nesneyi güncellemek için hiçbir yöntem yoktur. Yoksa orada mı?

+0

Biraz da ViewModel görerek ve yapmaya çalışıyorsun ne anlama olmadan yardım etmek "yerine". Bir başlangıç ​​noktası olarak, http://stackoverflow.com/questions/8774943/knockoutjs-observablearray-to-update-when-inner-observable-is-changed ve bu http://stackoverflow.com/questions adresini gördünüz./6425409/nasıl-yerine-a-verilen-dizin-öğe-in-knockoutjs? – saurus

cevap

15

Gözlemlenebilir bir öğede bir öğenin nasıl değiştirileceğini ve değişikliklerin Kullanıcı Arayüzü'ne nasıl bildirildiğini gösteren bir klavyedir.

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

anahtar burada observableArray üzerinde yerini işlevidir. Eklemeleri de kullanabilirsiniz.

... kullanımına dikkat aşağıda ... zor

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

Birisi bu değiştirme yöntemini belgeye eklemelidir. harika çalıştı, teşekkürler! –

+1

iyi nokta. Onu Nakavt kursuma ekledim çünkü çok sordum. –