2012-03-15 47 views
42

Tôi có một observableArray trong mô hình chế độ xem của mình. Sau khi tạo vm, tôi muốn thay thế hoàn toàn dữ liệu observableArray. Đây là cách tôi đang thực hiện:Thay thế tất cả các phần tử trong Knockout.js observableArray

//Initial Setup 
var vm = {}; 
vm.roles = ko.observableArray([]); 
ko.applyBindings(vm); 


//....replace array later on.... 
vm.roles(["1", "2"]); 

Điều này có vẻ ổn nhưng tôi lo ngại nếu điều này không chính xác và có thể dẫn đến rò rỉ bộ nhớ. Bất cứ ai có thể tuân thủ nếu đây là cách ưa thích để cập nhật một hiện tại observableArray giả sử bạn muốn thay thế tất cả dữ liệu của nó?

Tôi nhận thấy observableArray có phương pháp removeAll() và tự hỏi liệu điều đó có cần phải được gọi để thực hiện việc này một cách rõ ràng hay không, hoặc nếu tôi làm tốt với những gì tôi đang làm?

Trả lời

38

Kỹ thuật mà bạn đang sử dụng là phương pháp được đề xuất để thay thế hoàn toàn dữ liệu trong một observableArray. An observableArray thực sự chỉ là một thông thường observable với các chức năng bổ sung được thêm vào cho các hoạt động mảng hữu ích hoạt động trên mảng cơ bản và thông báo kích hoạt.

+3

Khi bạn nói "phương pháp được đề xuất" đào tạo của tôi từ trả lời các câu hỏi trên http://skeptics.stackexchange.com/ kicks in. Bạn sẽ có tài liệu/liên kết hỗ trợ cho tuyên bố của bạn? [với sự tôn trọng, tất nhiên; bạn là ông Knockmeout mình (O;] – Kristopher

-4

Tôi thấy rằng phương pháp được đề xuất không hoạt động trong IE9 trở xuống. Thay vào đó tôi đã tạo lại đối tượng,

vm.roles = ko.observableArray(["1","2"]) 
+0

Tôi tự hỏi nếu điều đó đã thay đổi với phiên bản mới hơn của Knockout ... Bạn đang sử dụng phiên bản nào? –

+14

Nếu bạn thay thế toàn bộ đối tượng, người quan sát sẽ không được thông báo, đúng không? –

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