EDIT 4/16/2012:我解决了将时区缩写为字母格式的问题,不得不下载第三方排序方法并添加一些东西以获得所需的结果。 现在唯一的问题是夏令时处理程序,但有很多主题。 但是,如果有人知道如何处理UTC夏令时,请随时提供帮助。
谢谢大家。///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////我制作了一个 html 表,我使用 knockoutjs 将其与 javscript 视图模型绑定,该模型从私人服务器 JSON 函数中提取信息。 我正在尝试使每一列可排序(单击列标题一次以根据该列的信息按降序获取所有内容;再次单击标题以升序获取所有内容,第三次按原始顺序获取所有内容)。
请注意:我已经搜索了我的问题并看到了其他解决方案,但到目前为止没有任何解决方案对我有用。 我希望找到特定于我的代码的解决方案。
Javascript ViewModel.js 文件基本上是这样的:
Event(column1, column2, ...., columnN){
var self = this;
self.column1 = column1;
self.column2 = column2;
.
.
}
//Sort column2 that has the Dates (dd (day) HHMM (hours/minutes) mmm (month) yy (year) format)
self.sortColumn = "Column2"
self.sortAscending = true;
self.SortByDates = function(){
if(self.sortColumn == "Column2")
self.sortAscending = !self.sortAscending;
else{
self.sortColumn = "Column2"
self.sortAscending = true;
}
self.rows.sort(function(a,b){
if(self.sortAscending == true)
for(self.Column2 in self.rows)
return a.Column2 > b.Column2 ? 1 : a.Column2 < b.Column2 ? -1 : 0;
else
return a.Column2 < b.Column2 ? 1 : a.Column2 > b.Column2 ? -1 : 0;
});
}
//specify location of server and info and get them
function getEvents(){
$.getJSON("http://.........",
function (data){
$.each(data.d, function(i, item){
handleEvent(item)
})
}
);
}
//pushes (AKA populates) info from server into the table
function handleEvent(item){
var newEvent = new Event(item.Column1InfoFromServer,
formatJSONDate(item.Column2DateInfoFromServer), .....)
this.Model.rows.push(newEvent);
}
//Formats the date info from server into dd (day) HHMM (hours/minutes) mmm (month) yy (year)
formatJSONDate(jsonDate){
var date = new Date(parseInt(jsonDate.substr(6)));
return date.format("dd HHMM mmm yy");
}
this.Model = new ViewModel();
this.getEvents();
ko.applyBindings(this.Model);
我很难以转换后的形式获取日期(是的,它必须采用这种形式 ->实际上,我仍然需要弄清楚如何在基于UTC的"HHMM"部分之后包含时区缩写)。 因此,假设我在表中有"11 1136 Apr 12"和"22 1624 Jan 12"以及其他日期。 现在,当我尝试根据日期对表格进行排序时,它们没有正确排序。 任何帮助不胜感激,谢谢。
编辑:为了清楚起见,我正在尝试以军事时区代码(时区"A"-"Z")显示时区。 此外,从服务器获取的日期已采用 UTC。
更新:
我正在看另一个问题,有人创建了一个淘汰网格插件:https://github.com/ericmbarnard/KoGrid
我敢打赌这可能会帮助你:-)
---怀旧的答案----
Underscore 库中有一些很棒的帮助程序函数,其中之一是排序:
http://documentcloud.github.com/underscore/#sortBy
sortBy_.sortBy(list, iterator, [context]) 返回 列表,按运行每个值的结果升序排列 通过迭代器。迭代器也可以是属性的字符串名称 按(例如长度)排序。
_.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });
=> [5, 4, 6, 3, 1, 2]
我会试一试,同时为您的约会对象创建一个更好的模型。听起来您需要存储一个唯一的时间点属性,以及用户的文本值。
好吧,要获取日期对象的数值,请按 pDate.valueOf() 排序。 这将为您提供自纪元以来的 # 毫秒。
但是,您的排序函数内部存在问题,但我不确定它应该做什么。 您不能在排序函数中遍历对象并返回这样的值。