Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript KoGrid:默认排序不起作用_Javascript_Knockout.js_Kogrid - Fatal编程技术网

Javascript 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, ...

作为2.1.1的一部分,我无法使默认排序正常工作,这意味着如果希望网格按特定列/方向排序,则无法获得预期的行为。koGrid中的默认排序是由sortInfo在第一次配置gridOptions时实现的

我创建了一个示例来演示这个问题。您可以注意到列表没有按名称排序,甚至我已经指定了sortInfo来进行排序

1。正在使用排序信息初始化koGrid:

        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);
});
});