Tôi hiện đang gặp sự cố khi làm mới giao diện người dùng khi tôi nhận dữ liệu mới từ máy chủ cho một mục duy nhất trong một đối tượng có thể quan sát được của đối tượng bao bọc. .Không thể cập nhật giao diện người dùng Knockout với đối tượng dữ liệu mới
xem xét như sau:
var vm = {
....
localEdited: ko.mapping.fromJS(new ItemWrapper(defaultModelSerialised)),
selected: ko.observable(null),
editItem: function(data) {
// clone a temporary copy of data for the dialog when opening (*.localEdited on dialog)
var clonedData = ko.toJS(data);
ko.mapping.fromJS(clonedData, null, this.localEdited);
// selected should now point to the item in the obserable array which will be refreshed
this.selected(data);
// open dialog...
},
submitDialog: function(data) {
// submit data to server...
// (1) commit the data back to UI (new item is return in resp.entity from server)
vm.selected(new ItemWrapper(resp.entity));
// at this point the UI isn't showing the updated value
// (2) however if I do this it reflects the data change in the UI
this.selected().Name("changed"); // updates the UI.
}
Ai đó có thể giải thích tại sao đi qua trong ItemWrapper vào vm.selected không cập nhật giao diện người dùng trong khi ở (2) nó hoạt động. Tôi không muốn phải thiết lập mỗi tài sản như trong (2) cho mỗi tài sản.
ItemWrapper trông giống như vậy:
function PoolWrapper(pool) {
this.Name = ko.observable(pool.Name);
// more properties...
}
Bạn có ràng buộc mọi thứ với vm.selected trong html không? Nếu không, tại sao bạn mong đợi knockout để cập nhật giao diện người dùng trong dòng này vm.selected (new ItemWrapper (resp.entity)); ? –
Có lẽ bạn có thể nhận được một cái gì đó trong jsFiddle để chứng minh? Sẽ dễ dàng hơn khi nhìn thấy một phần mã của bạn. Tôi giả định rằng có lẽ bạn đang làm 'với: selected' trong giao diện người dùng của bạn hoặc sử dụng một mẫu chống lại' lựa chọn'? –
@RomanBataev: Không có gì bị ràng buộc với vm.selected trực tiếp. Trong editItem() dữ liệu được truyền vào là từ ItemWrapper trong observableArray. Biến được chọn sau đó trỏ đến mục trong mảng. Như điểm (2) chứng minh nó được ràng buộc với giao diện người dùng ok khi đi qua các thuộc tính riêng lẻ, nhưng không phải khi chuyển ItemWrapper vào biến đã chọn(). – jaffa