我从数据库中提取一堆条目,将它们存储在一个变量中,然后根据各种标准将它们过滤到一个单独的变量中。一旦我的剑道图表被初始化,基于过滤的版本,它会以某种方式改变第一个变量中条目的日期格式,但我的代码希望它们是原始格式。我已将问题追踪到一行,但我需要那一行。
我在 ASP.NET MVC4 中使用 C#。
这是获取数据的ajax调用:
$.ajax({
// gets request logs
url: 'Usage/GetLogs',
dataType: 'json',
success: function (data, status, xhr) {
window.logs = data;
},
error: function (xhr, status, error) {
alert('Error in GetLogs: ' + status);
}
});
这执行得很好,并且该logs
数组包含大约 2000 个 Json 对象,每个对象看起来像这样:
CalcId: 129
Date: "/Date(1373432400000)/"
DateTime: "/Date(1373432621070)/"
Id: 1
ProvId: 2
然后调用以下函数,其中firstfilter = true
:
function FilterLogs(firstfilter) {
window.currentlogs = [];
for (var i = 0; i < logs.length; i++) {
if (parseInt(logs[i].Date.substring(6)) >= Date.parse(StartDate)
&& parseInt(logs[i].Date.substring(6)) <= Date.parse(EndDate)
&& $('#ProvCheckBox' + logs[i].ProvId).hasClass('visible')
&& $('#ProvCheckBox' + logs[i].ProvId).prop('checked')
&& $('#CalcCheckBox' + logs[i].CalcId).prop('checked'))
currentlogs.push(logs[i]);
}
if (firstfilter)
InitializeOutput();
else
UpdateOutput();
}
这很好用,第一次被调用。parseInt(logs[i].Date.substring(6))
从属性中提取数字Date
,并且比较有效。指定日期范围内且其 Calc 和 Prov 复选框被选中的每个日志都被推送到currentlogs
. 然后InitializeOutput
被称为:
function InitializeOutput() {
$('#DateChart').kendoChart({
dataSource: {
data: currentlogs,
schema: {
model: {
fields: {
Id: { type: "number" },
//Date: { type: "date" }
//This is the problematic line of code
}
}
}
},
series: [{
type: "column",
aggregate: "count",
field: "Id",
categoryField: "Date"
}],
categoryAxis: {
baseUnit: "months",
majorGridLines: {
visible: false
}
}
});
}
如果Date: { type: "date" }
未注释,则在下次FilterLogs
调用时,该Date
属性已在logs
. 它们现在看起来像这样:
CalcId: 129
Date: Wed Jul 10 2013 00:00:00 GMT-0500 (Central Daylight Time)
DateTime: "/Date(1373432621070)/"
Id: 1
ProvId: 2
一旦它到达该if (parseInt(logs[i].Date.substring(6))
语句,我就会得到以下信息:未捕获的类型错误:对象 [对象日期] 没有方法“子字符串”。
但是我需要取消注释那行代码,因为没有它,baseUnit
除了"days"
. 指定"weeks"
或"months"
或被"years"
忽略,图表显示天数。
我尝试将的所有实例更改currentlogs
为局部变量templogs
,然后在过滤完成后复制templogs
到currentlogs
其中,并且我还在完成InitializeOutput
后调用FilterLogs
,而不是从内部调用,因此“临时日志”甚至不应该存在创建图表的时间,我得到相同的结果。
有趣的是,如果我更改(未显示)kendo DatePickers 的起始值,以便在日期范围内没有日志,并currentlogs
在第一次调用时保持空白FilterLogs
,然后我打开日期范围,我没有得到任何问题。但我认为这不是push
问题,因为我已经单步执行了代码并在执行logs
后保持正常push
。
到底是怎么回事?
我想继续以我的方式处理日期,因为代码中的其他所有内容都可以正常工作。为什么logs
只连接到剑道时会搞砸currentlogs
?