2012-06-22 29 views
6

có cách nào để tự động sắp xếp một mảng quan sát được khi thuộc tính bị ràng buộc bị thay đổi không? Tôi tin vào ví dụ sau, chế độ xem của tôi được cập nhật khi tôi thêm người mới, nhưng tôi có thể làm cho chế độ xem làm mới và áp dụng chức năng sắp xếp của tôi nếu một trong các độ tuổi của người đó bị thay đổi không?Tự động sắp xếp ko.observableArray là thuộc tính bị ràng buộc thay đổi

person = { 
    age: ko.observable(); 
} 

viewModel = { 

    people: ko.observableArray([]), 

    someSortFunction: function() { 
     this.people.sort(function(person1, person2) { 
      return person2.age() - person1.age(); 
     }); 
    } 
} 

<div data-bind="foreach: people"> 
    <span data-bind="text: age"/> 
</div> 

Trả lời

4

Bạn có thể đăng ký một quan sát và hành động bất cứ khi nào mà thay đổi quan sát được:

person.age.subscribe(function (newValue) { 
    viewModel.someSortFunction(); 
}); 
+1

Lưu ý: có những vấn đề với cách tiếp cận này rằng những cân nhắc nó sẽ muốn được biết. Đầu tiên: để đảm bảo rằng các mảng quan sát liên tục sắp xếp, bạn sẽ phải tự đăng ký với cùng một thuộc tính trên mọi phần tử trong mảng. Thứ hai: các đăng ký vẫn còn trừ khi bạn tự xóa chúng trên mọi phần tử khi bạn xóa nó khỏi mảng quan sát được. Điều này tạo ra khả năng rò rỉ bộ nhớ. Sử dụng kỹ thuật này với sự chăm sóc tuyệt vời. – Randolpho

+1

@Randolpho :: khá đúng ... những gì có vẻ hiển nhiên có thể dẫn đến một lỗi tương tự như 'Uncaught RangeError: Kích thước ngăn xếp cuộc gọi tối đa vượt quá' trong đó 'đăng ký' tiếp tục được chạy trên mỗi loại ... và không bao giờ dừng – beauXjames

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