我需要什么
我想通过Parent字段对网格/存储进行排序,但由于获取的Parent字段是一个对象,因此当我根据Parent属性放置一个分类器时,它无法获取任何记录。即使我添加了一个分拣机功能,它也不会被调用。我正在使用拉力网,不确定这是否有所作为
sorters: [{
property: 'Parent',
direction: 'DESC',
sorterFn: function(one, two) {
console.log('one',one);
console.log('two',two); // console never shows these
return -1;
}
}]
我尝试了什么
为了绕过显示对象,我在父列中添加了一个渲染器函数。我尝试在列中添加一个doSort,并调用该函数,但是对存储进行排序不会调用我的sorterFn,它只使用属性和方向(类似于无法在上面运行的console.log())
答案 0 :(得分:0)
以下是可正常运行的自定义应用的示例。关键是将remoteSort的默认storeConfig设置为false!
Ext.define('CustomApp', {
extend: 'Rally.app.App',
componentCls: 'app',
launch: function() {
App = this;
Rally.data.ModelFactory.getModel({
type: 'PortfolioItem/Feature',
success: function(model) {
App.add({
xtype: 'rallygrid',
id : 'grid',
model: model,
columnCfgs: [
'FormattedID',
'Name',
{dataIndex: 'Parent', name: 'Parent',
doSort: function(state) {
var ds = this.up('grid').getStore();
var field = this.getSortParam();
console.log('field',field);
ds.sort({
property: field,
direction: state,
sorterFn: function(v1, v2){
v1 = v1.get(field);
v2 = v2.get(field);
console.log('v1',v1);
console.log('v2',v2);
if (!v1 && !v2) {
return 0;
} else if (!v2) {
return 1;
} else if (!v1) {
return -1;
}
return v1.Name.localeCompare(v2.Name);
}
});
},
renderer: function(value, meta, record) {
var ret = record.raw.Parent;
if (ret) {
return ret.Name;
} else {
return record.data.Name;
}
}
}
],
storeConfig: {
remoteSort: false
}
});
}
});
}
});