KO Grid - 重复值
KO Grid - repeating value
我有一个 ASP.Net MVC 站点,在我的一个视图中有一个 KOGrid。这通过对控制器进行 Ajax 调用来提取数据,然后控制器通过 EF 从 SQL 服务器中进行选择。我的数据table如下:
我的 KO 网格有以下列定义:
self.columnDefs = [
{ width: 50, field: 'workflowTask_WorkflowTaskId', displayName: 'Id' },
{ width: 150, field: 'Timestamp', displayName: 'Timestamp', cellFilter: function (data) { return moment(data).format('DD/MM/YYYY h:mm a') } },
{ width: 100, field: 'currentState', displayName: 'Crnt State' },
{ width: 500, field: 'note', displayName: 'Notes' },
{ width: 100, field: 'previousState', displayName: 'Prev State' },
{ width: 100, field: 'currentUser', displayName: 'Crnt User', sortable: false },
{ width: 100, field: 'amendedByUser', displayName: 'Amnd By', sortable: false },
{ width: 100, field: 'previousUser', displayName: 'Prev User', sortable: false }
];
我有以下网格选项:
self.gridOptions = {
data: self.recs,
columnDefs: self.columnDefs,
autogenerateColumns: false,
showGroupPanel: true,
canSelectRows: false,
showFilter: true,
filterOptions: self.filterOptions,
enablePaging: true,
pagingOptions: self.pagingOptions,
sortInfo: self.sortInfo,
rowHeight: 35
};
我有一个可观察数组来保存要在 kogrid 中显示的数据:
self.recs = ko.observableArray([]);
这是由以下 javascript 函数填充的:
self.get = function () {
$loadingIndicator.show();
$.ajax({
url: BASE_URL + 'TaskHistory/GetRecords',
type: 'get',
data: {
'page': self.pagingOptions.currentPage(),
'pageSize': self.pagingOptions.pageSize(),
'filter': self.filterOptions.filterText == undefined ? '' : self.filterOptions.filterText(),
'sort': self.sortInfo().column.field + ' ' + self.sortInfo().direction
},
contentType: 'application/json; charset=utf-8',
success: function (data) {
self.pagingOptions.totalServerItems(data.RecCount);
var recsArray = [];
$.each(data.PageOfRecords, function (key, value) {
recsArray.push(
new Task(value.WorkflowTaskHistoryId,
value.Timestamp,
value.PreviousState,
value.CurrentState,
value.AmendedByUser,
value.Note,
value.PreviousUser,
value.CurrentUser,
value.WorkflowTask_WorkflowTaskId));
});
self.recs(recsArray);
}
});
$loadingIndicator.hide();
};
从 Chrome 开发人员工具中截取的以下屏幕截图可以看出,此 observable 已正确填充:
我的问题是 - 显示时,显示的日期都是当前机器日期时间 - 与从 ajax 调用检索的数据无关,如下所示:
谁能看看我哪里出错了?
您的代码中有一个拼写错误,在您的 def 列中,您的 'Timestamp'
大写 T
但您的 属性 被称为 timestamp
.
所以修复非常简单:
{ width: 150, field: 'timestamp', displayName: 'Timestamp', cellFilter: function (data) { return moment(data).format('DD/MM/YYYY h:mm a') } },
为什么奇怪的行为:
- KoGrid 不会检查您是否提供了有效的
field
名称,在这种情况下,它将未定义作为 data
参数 传递给 cellFilter
函数
- 如果您在没有有效日期的情况下调用
moment
函数,它默认为当前时间,这就是为什么您的所有列都显示相同时间的原因
我有一个 ASP.Net MVC 站点,在我的一个视图中有一个 KOGrid。这通过对控制器进行 Ajax 调用来提取数据,然后控制器通过 EF 从 SQL 服务器中进行选择。我的数据table如下:
我的 KO 网格有以下列定义:
self.columnDefs = [
{ width: 50, field: 'workflowTask_WorkflowTaskId', displayName: 'Id' },
{ width: 150, field: 'Timestamp', displayName: 'Timestamp', cellFilter: function (data) { return moment(data).format('DD/MM/YYYY h:mm a') } },
{ width: 100, field: 'currentState', displayName: 'Crnt State' },
{ width: 500, field: 'note', displayName: 'Notes' },
{ width: 100, field: 'previousState', displayName: 'Prev State' },
{ width: 100, field: 'currentUser', displayName: 'Crnt User', sortable: false },
{ width: 100, field: 'amendedByUser', displayName: 'Amnd By', sortable: false },
{ width: 100, field: 'previousUser', displayName: 'Prev User', sortable: false }
];
我有以下网格选项:
self.gridOptions = {
data: self.recs,
columnDefs: self.columnDefs,
autogenerateColumns: false,
showGroupPanel: true,
canSelectRows: false,
showFilter: true,
filterOptions: self.filterOptions,
enablePaging: true,
pagingOptions: self.pagingOptions,
sortInfo: self.sortInfo,
rowHeight: 35
};
我有一个可观察数组来保存要在 kogrid 中显示的数据:
self.recs = ko.observableArray([]);
这是由以下 javascript 函数填充的:
self.get = function () {
$loadingIndicator.show();
$.ajax({
url: BASE_URL + 'TaskHistory/GetRecords',
type: 'get',
data: {
'page': self.pagingOptions.currentPage(),
'pageSize': self.pagingOptions.pageSize(),
'filter': self.filterOptions.filterText == undefined ? '' : self.filterOptions.filterText(),
'sort': self.sortInfo().column.field + ' ' + self.sortInfo().direction
},
contentType: 'application/json; charset=utf-8',
success: function (data) {
self.pagingOptions.totalServerItems(data.RecCount);
var recsArray = [];
$.each(data.PageOfRecords, function (key, value) {
recsArray.push(
new Task(value.WorkflowTaskHistoryId,
value.Timestamp,
value.PreviousState,
value.CurrentState,
value.AmendedByUser,
value.Note,
value.PreviousUser,
value.CurrentUser,
value.WorkflowTask_WorkflowTaskId));
});
self.recs(recsArray);
}
});
$loadingIndicator.hide();
};
从 Chrome 开发人员工具中截取的以下屏幕截图可以看出,此 observable 已正确填充:
我的问题是 - 显示时,显示的日期都是当前机器日期时间 - 与从 ajax 调用检索的数据无关,如下所示:
谁能看看我哪里出错了?
您的代码中有一个拼写错误,在您的 def 列中,您的 'Timestamp'
大写 T
但您的 属性 被称为 timestamp
.
所以修复非常简单:
{ width: 150, field: 'timestamp', displayName: 'Timestamp', cellFilter: function (data) { return moment(data).format('DD/MM/YYYY h:mm a') } },
为什么奇怪的行为:
- KoGrid 不会检查您是否提供了有效的
field
名称,在这种情况下,它将未定义作为data
参数 传递给 - 如果您在没有有效日期的情况下调用
moment
函数,它默认为当前时间,这就是为什么您的所有列都显示相同时间的原因
cellFilter
函数