var data=ko.observableArray[(
{mydate:'01 Jan 1997'},
{mydate:'01 Aug 1977'},
)];
我想在点击按钮时按升序和降序对上面的数据进行排序。 Plz帮助我。
提前致谢。
答案 0 :(得分:0)
有很多方法可以对observableArray进行排序,
选项1 只需使用字符串排序,
ViewModel
$(function () {
function VM() {
var self = this;
self.data = ko.observableArray([
{mydate: '01 Jan 1997'},
{mydate: '01 Aug 1977'},
]);
self.stringSort = function (a, b) {
return a.mydate.toLowerCase() > b.mydate.toLowerCase() ? 1 : -1;
};
self.stringSortInstances = ko.dependentObservable(function () {
return self.data.slice().sort(self.stringSort);
}, self);
}
ko.applyBindings(new VM());
});
<强> HTML 强>
<ul data-bind="foreach:stringSortInstances ">
<li data-bind="text:$data.mydate"></li>
</ul>
选项 - 2 在这里,您需要更改observableArray值格式,然后将字符串转换为日期和排序。它将根据日期排序。
查看模型
$(function () {
function VM() {
self.dataInUniDateFormate = ko.observableArray([
{mydate: '1997/01/01'},
{mydate: '1977/08/01'},
]);
self.dateSort = function (a, b) {
return new Date(a.mydate) > new Date(b.mydate) ? 1 : -1;
};
self.DateSortInstances = ko.dependentObservable(function () {
return self.dataInUniDateFormate.slice().sort(self.dateSort);
}, self);
}
ko.applyBindings(new VM());
});
<强> HTML 强>
<p>Date Sort</p>
<ul data-bind="foreach:DateSortInstances">
<li data-bind="text:$data.mydate"></li>
</ul>
选项3 您可以使用一些外部插件将字符串转换为日期然后排序。您可以使用dateformater或momentjs或任何其他日期转换插件
谢谢,如果有帮助,请告诉我。