Javascript KoGrid:默认排序不起作用
作为2.1.1的一部分,我无法使默认排序正常工作,这意味着如果希望网格按特定列/方向排序,则无法获得预期的行为。koGrid中的默认排序是由sortInfo在第一次配置gridOptions时实现的 我创建了一个示例来演示这个问题。您可以注意到列表没有按名称排序,甚至我已经指定了sortInfo来进行排序 1。正在使用排序信息初始化koGrid:Javascript KoGrid:默认排序不起作用,javascript,knockout.js,kogrid,Javascript,Knockout.js,Kogrid,作为2.1.1的一部分,我无法使默认排序正常工作,这意味着如果希望网格按特定列/方向排序,则无法获得预期的行为。koGrid中的默认排序是由sortInfo在第一次配置gridOptions时实现的 我创建了一个示例来演示这个问题。您可以注意到列表没有按名称排序,甚至我已经指定了sortInfo来进行排序 1。正在使用排序信息初始化koGrid: this.gridOptions = { data: self.myData, ...
this.gridOptions = {
data: self.myData,
...
sortInfo: ko.observable({
column: { "field": "name" },
"direction": "asc"
})
...
};
window.kg.Grid = function (options) {
...
self.columnByField = function (field) {
if(field) {
var column;
$.each(self.columns(), function (i, c) {
if(field == c.field) {
column = c;
return false;
}
});
return column;
}
}
...
}
window.kg.Grid = function (options) {
...
self.init = function () {
...
self.buildColumns();
var sortingProperties = self.sortInfo.peek();
if(sortingProperties) {
var col = self.columnByField(sortingProperties.column.field);
if(col) {
col.sortDirection(sortingProperties.direction === ASC ? DESC : ASC);
col.sort();
}
}
...
}
...
}
2。请注意,列表未排序,箭头也未显示:
this.gridOptions = {
data: self.myData,
...
sortInfo: ko.observable({
column: { "field": "name" },
"direction": "asc"
})
...
};
window.kg.Grid = function (options) {
...
self.columnByField = function (field) {
if(field) {
var column;
$.each(self.columns(), function (i, c) {
if(field == c.field) {
column = c;
return false;
}
});
return column;
}
}
...
}
window.kg.Grid = function (options) {
...
self.init = function () {
...
self.buildColumns();
var sortingProperties = self.sortInfo.peek();
if(sortingProperties) {
var col = self.columnByField(sortingProperties.column.field);
if(col) {
col.sortDirection(sortingProperties.direction === ASC ? DESC : ASC);
col.sort();
}
}
...
}
...
}
如果指定,我将koGrid 2.2.1 debug js更改为使用sortInfo。基本上,我做了如下两个更改: 1。创建了一个函数,该函数按字段将列返回到网格对象中:
this.gridOptions = {
data: self.myData,
...
sortInfo: ko.observable({
column: { "field": "name" },
"direction": "asc"
})
...
};
window.kg.Grid = function (options) {
...
self.columnByField = function (field) {
if(field) {
var column;
$.each(self.columns(), function (i, c) {
if(field == c.field) {
column = c;
return false;
}
});
return column;
}
}
...
}
window.kg.Grid = function (options) {
...
self.init = function () {
...
self.buildColumns();
var sortingProperties = self.sortInfo.peek();
if(sortingProperties) {
var col = self.columnByField(sortingProperties.column.field);
if(col) {
col.sortDirection(sortingProperties.direction === ASC ? DESC : ASC);
col.sort();
}
}
...
}
...
}
2。更改了网格对象init方法以查找sortInfo并对列进行排序:
this.gridOptions = {
data: self.myData,
...
sortInfo: ko.observable({
column: { "field": "name" },
"direction": "asc"
})
...
};
window.kg.Grid = function (options) {
...
self.columnByField = function (field) {
if(field) {
var column;
$.each(self.columns(), function (i, c) {
if(field == c.field) {
column = c;
return false;
}
});
return column;
}
}
...
}
window.kg.Grid = function (options) {
...
self.init = function () {
...
self.buildColumns();
var sortingProperties = self.sortInfo.peek();
if(sortingProperties) {
var col = self.columnByField(sortingProperties.column.field);
if(col) {
col.sortDirection(sortingProperties.direction === ASC ? DESC : ASC);
col.sort();
}
}
...
}
...
}
这样就解决了默认排序问题。我已经创建了一个fork并在那里添加了新的debug js文件
现在,当您第一次加载网格时,排序工作如下图所示:
为gridOption sortInfo添加函数,如下所示
....
sortInfo: this.sortDetails;
}
this.sortDetails.subscribe(function (data) {
this.sortData.sort(function (left, right) {
return left == right ? 0 : (left < right ? -1 : 1);
});
});
定义函数排序细节,如下所示
....
sortInfo: this.sortDetails;
}
this.sortDetails.subscribe(function (data) {
this.sortData.sort(function (left, right) {
return left == right ? 0 : (left < right ? -1 : 1);
});
});
this.sortDetails.subscribe(函数(数据)){
this.sortData.sort(函数(左、右){
返回左==右?0:(左<右?-1:1);
});
});