2013-05-24 6 views
5

Tôi đã có một danh sách được sắp xếp bằng cách sử dụng knockout.js cho một danh sách lựa chọn. Tôi muốn chuyển đổi nó cho một danh sách không có thứ tự. Phương pháp phân loại danh sách với knockout.js là gì? Tôi đang nghĩ đến lỗi này là với: allItems() chiều dài> 1Danh sách sắp xếp Knockout.js

http://jsfiddle.net/infatti/Ky5DK/

var BetterListModel = function() { 
    this.allItems = ko.observableArray([ 
     { name: 'Denise' }, 
     { name: 'Charles' }, 
     { name: 'Bert' } 
    ]); // Initial items 

    this.sortItems = function() { 
     this.allItems.sort(); 
    }; 
}; 

ko.applyBindings(new BetterListModel()); 


<button data-bind="click: sortItems, enable: allItems().length > 1">Sort</button> 

Trả lời

7
this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;})); 
+0

Bạn có thể vui lòng chỉnh sửa câu trả lời để tăng dần và giảm dần không? Tôi bối rối a và b là gì? – Ahmed

+0

'a' và 'b' không phải là biến mà bạn sử dụng trong ứng dụng của mình, đó thực sự là một số biến ngẫu nhiên từ hàm sắp xếp, vì hàm sắp xếp cần nhận 2 tham số để sắp xếp 2 mục, phải không? :) – dpaul1994

+1

Nó thường được chấp nhận trên SO mà bạn giải thích mẫu mã của bạn và không chỉ cung cấp một câu trả lời sao chép và dán. Điều này giúp người dùng trong tương lai đến đây tìm kiếm thêm thông tin về chủ đề này. –

4
var BetterListModel = function() { 
    this.allItems = ko.observableArray([ 
    { name: 'Denise' }, 
    { name: 'Charles' }, 
    { name: 'Bert' } 
    ]); // Initial items 

    this.sortItemsAscending = function() { 
     this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;})); 
    }; 

    this.sortItemsDescending = function() { 
     this.allItems(this.allItems().sort(function(a, b) { return a.name < b.name;})); 
    }; 
}; 

dòng giải thích:. weWiliChangeTheArrayToValue (weWilSortTheArrayWithASpecialFunction (ComparatorFunction))

ComparatorFunction tức .

function(a, b) { return a.name < b.name;} 

là chức năng đặc biệt giúp chức năng sắp xếp ... sắp xếp tốt.
Cần 2 đối số và so sánh chúng trở lại đúng nếu đối số đầu tiên là 'lớn hơn' (nên nằm xa hơn trong danh sách) và sai nếu đối số đầu tiên là 'nhỏ hơn'
Mọi thuật toán sắp xếp (gần như) hoạt động bằng cách so sánh 2 phần tử của bộ sưu tập được sắp xếp cho đến khi tất cả đều theo thứ tự.
Thay đổi thứ tự được thực hiện bằng cách đảm bảo rằng hàm trả về false khi nó sẽ trở thành sự thật bình thường - Cách dễ nhất để làm như vậy là bằng cách thay đổi> hoạt động để <

EDIT một điều nữa: nếu bạn so sánh phi Ký tự ASCII sử dụng trả về a.localCompare (b); (Và trở b.localCompare (a);) và khi giao dịch với số lượng sử dụng "-" hát vì vậy nó hoạt động một số học

EDIT2
Cảnh báo các phương pháp trên ">" có thể phá vỡ với bản sao trong mảng sử dụng

return a.name < b.name ? -1 : a.name > b.name ? 1 : 0; 

thay vì (hoặc chỉ localCompare)

+0

Điều này sẽ được đánh dấu là câu trả lời đúng. Nó trả lời câu hỏi và giải thích những gì đang xảy ra trong mẫu mã. +1 –