2012-01-14 35 views
8

Tôi đang sử dụng điều khiển lưu lượng không chứa trong ko 2.0. Khi tôi cập nhật một mục trong observableArray của tôi, nó không cập nhật giao diện người dùng. Tôi đang cập nhật mảng như sau:Cập nhật một ObservableArray không cập nhật giao diện người dùng

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

Tôi nghĩ rằng nó không cập nhật vì cập nhật mảng theo chỉ mục không gọi bất cứ điều gì trong ko. Từ khi nhìn vào the documentation có vẻ như không có phương pháp cập nhật một đối tượng sẽ cập nhật giao diện người dùng. Hay là có?

+0

Một chút khó khăn để giúp đỡ mà không thấy viewmodel của bạn, và tìm hiểu những gì bạn đang cố gắng làm. Là điểm bắt đầu, bạn có thấy câu hỏi này http://stackoverflow.com/questions/8774943/knockoutjs-observablearray-to-update-when-inner-observable-is-changed và http://stackoverflow.com/questions này không/6425409/how-to-replace-a-given-chỉ số-yếu tố-in-knockoutjs? – saurus

Trả lời

15

Dưới đây là một fiddle thể hiện cách thay thế một mục trong ObservableArray và có các thay đổi của nó thông báo cho UI.

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

Mấu chốt ở đây là thay thế chức năng trên observableArray. Bạn cũng có thể sử dụng mối nối.

... Chú ý việc sử dụng "thay thế" bên dưới ...

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

ai đó nên thêm phương thức thay thế đó vào tài liệu. làm việc tuyệt vời, cảm ơn! –

+1

điểm tốt. Tôi đã thêm nó vào khóa học Knockout của tôi bởi vì tôi được hỏi về nó rất nhiều. –

Các vấn đề liên quan