sim*_*ple 5 javascript jquery knockout.js
我有一个排序列表使用knockout.js作为选择列表.我想将它转换为无序列表.使用knockout.js对列表进行排序的方法是什么?我认为错误是:allItems().length> 1
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>
Run Code Online (Sandbox Code Playgroud)
this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;}));
Run Code Online (Sandbox Code Playgroud)
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;}));
};
};
Run Code Online (Sandbox Code Playgroud)
行解释:weWiliChangeTheArrayToValue(weWilSortTheArrayWithASpecialFunction(ComparatorFunction))
ComparatorFunction即.
function(a, b) { return a.name < b.name;}
Run Code Online (Sandbox Code Playgroud)
是一个特殊的函数,可以帮助排序功能......排序.
它需要2个参数并比较它们返回true如果第一个参数是'更大'(应该在列表中更远)而假如果第一个参数是'更小'
每个(几乎)排序算法通过比较已排序集合的2个元素来工作直到一切都井然有序.
更改顺序是通过确保函数在正常返回true时返回false来完成的 - 最简单的方法是将>操作更改为<
编辑还有一件事:如果比较非ASCII字符,请使用return a.localCompare(b); (并返回b.localCompare(a);)并且当处理数字时使用" - "唱,所以这是一个算术运算
EDIT2
警告上面的方法">"可能会破坏数组使用中的重复项
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
相反(或只是localCompare)