Xåp*_* - 4 javascript grid extjs extjs4
这里有一个简单的问题,我真的很惊讶我无法在任何地方找到答案.
我有以下产品型号:
Ext.define('Product', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'name', type: 'string'},
{name: 'manufacturer', type: 'auto'}, // i.e. nested object literal
],
});
Run Code Online (Sandbox Code Playgroud)
可以看出,产品内部有一个嵌套对象,其中包含有关制造商的详细信息(ID,名称,描述等).
我在Ext.grid.Panel中显示产品,如下所示:
Ext.create('Ext.grid.Panel', {
title: 'Products',
...
remoteSort: true,
columns: [
{text: 'Id', dataIndex: 'id', sortable: true},
{text: 'Name', dataIndex: 'name', sortable: true},
{text: 'Manufacturer', dataIndex: 'manufacturer', sortable: true, renderer: function(manufacturer) {
return manufacturer.name; // render manufacturer name
}
},
],
});
Run Code Online (Sandbox Code Playgroud)
如您所见,所有三列都配置为可排序,我正在使用远程排序.这适用于前两列,但第三列(制造商)给我带来了麻烦.
例如,当用户按产品名称对网格进行排序时,Ext会将以下JSON发送到服务器:
{ sort: [{ property: 'name', direction: 'ASC' }] }
Run Code Online (Sandbox Code Playgroud)
这很好,因为服务器知道只按每个产品的name
属性排序.
但是当用户按制造商对网格进行排序时,发送的JSON是:
{ sort: [{ property: 'manufacturer', direction: 'ASC' }] }
Run Code Online (Sandbox Code Playgroud)
由于制造商是一个对象,这不会让服务器知道它应该排序的制造商的哪个属性!它是制造商的ID吗?或者是制造商的名字?或者是其他东西?
对于我的网格,因为我渲染制造商的名称,我想按名称对其进行排序.但我认为没办法告诉服务器这个.而且我当然不想让我的服务器一直按制造商的名字排序.
如果JSON是这样发送的,那将是理想的:
{ sort: [{ property: 'manufacturer.name', direction: 'ASC' }] }
Run Code Online (Sandbox Code Playgroud)
可悲的是,Ext似乎没有这样做(?).那么,解决方案是什么?
Xåp*_* - 7
好的,我在Sencha论坛上问过并得到了答复.您似乎可以getSortParam()
在列配置中覆盖.例:
columns: [
...
{
header: 'Manufacturer',
dataIndex: 'manufacturer',
sortable: true,
renderer: function(manufacturer) {
return manufacturer.name; // render manufacturer name
},
getSortParam: function() {
return 'manufacturer.name';
},
}
...
]
Run Code Online (Sandbox Code Playgroud)
这将发送我在OP中描述的理想JSON.现在我只需要让我的服务器正确解析它!:)
归档时间: |
|
查看次数: |
3981 次 |
最近记录: |