这里是一个简单的问题,我真的很惊讶我在任何地方都找不到答案。
我有以下产品型号:
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
],
});
可以看出,产品内部有一个嵌套对象,其中包含有关制造商的详细信息(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
}
},
],
});
如您所见,所有三列都配置为可排序的,我正在使用远程排序。这适用于前两列,但第三列(制造商)给我带来了麻烦。
例如,当用户按产品名称对网格进行排序时,Ext 将以下 JSON 发送到服务器:
{ sort: [{ property: 'name', direction: 'ASC' }] }
这很好,因为服务器知道按每个产品的name
属性简单地排序。
但是当用户按制造商对网格进行排序时,发送的 JSON 是:
{ sort: [{ property: 'manufacturer', direction: 'ASC' }] }
由于制造商是一个对象,这不会让服务器知道它应该根据制造商的哪个属性进行排序!是制造商的id吗?还是制造商的名字?或者是其他东西?
对于我的网格,由于我渲染了制造商的名称,我想按名称对其进行排序。但我看不出有办法告诉服务器这一点。而且我当然不想让我的服务器一直按制造商的名称排序。
如果 JSON 是这样发送的,那将是理想的:
{ sort: [{ property: 'manufacturer.name', direction: 'ASC' }] }
可悲的是,Ext 似乎没有这样做(?)。那么,解决方案是什么?