带有配置 remoteSort 和 groupField 的 ExtJs 6.02 Store 使商店自动加载
ExtJs 6.02 Store with configs remoteSort and groupField makes the store to auto load
所以问题是,如果您使用
实例化商店
remoteSort
和
groupField
商店以自动加载的方式触发对服务器的请求。
例如
Ext.create('Ext.data.Store',{
remoteSort: true,
groupField: 'someProperty',
model: 'MyApp.model.SomeModel',
proxy: {
type: 'ajax',
api: {
read: 'myRestUrl'
},
reader: {
type: 'json',
rootProperty: 'data'
}
}
});
以上触发对
的请求
myRestUrl
不应该。
使用 ExtJs 6.02
所以为了避免
开店
remoteSort: true
和
groupField
为了自动加载,我覆盖了 'Ext.data.AbstractStore'
上的 group
方法
/**
* Groups data inside the store.
* @param {String/Object} grouper Either a string name of one of the fields in this Store's
* configured {@link Ext.data.Model Model}, or an object, or a {@link Ext.util.Grouper grouper} configuration object.
* @param {String} [direction] The overall direction to group the data by. Defaults to the value of {@link #groupDir}.
*/
group: function(grouper, direction) {
var me = this,
sorters = me.getSorters(false),
change = grouper || (sorters && sorters.length)
if (grouper && typeof grouper === 'string') {
grouper = {
property: grouper,
direction: direction || me.getGroupDir()
};
}
me.settingGroups = true;
me.getData().setGrouper(grouper);
delete me.settingGroups;
if (change) {
if (me.getRemoteSort()) {
/**
* when grouping a store only if the store is loaded trigger a load otherwise
* the store would be autoloading.
*/
if(me.isLoaded()) {
me.load({
scope: me,
callback: me.fireGroupChange
});
}
} else {
me.fireEvent('datachanged', me);
me.fireEvent('refresh', me);
me.fireGroupChange();
}
}
// groupchange event must fire when group is cleared.
// The Grouping feature forces a view refresh when changed to a null grouper
else {
me.fireGroupChange();
}
},
});
所以问题是,如果您使用
实例化商店remoteSort
和
groupField
商店以自动加载的方式触发对服务器的请求。
例如
Ext.create('Ext.data.Store',{
remoteSort: true,
groupField: 'someProperty',
model: 'MyApp.model.SomeModel',
proxy: {
type: 'ajax',
api: {
read: 'myRestUrl'
},
reader: {
type: 'json',
rootProperty: 'data'
}
}
});
以上触发对
的请求myRestUrl
不应该。
使用 ExtJs 6.02
所以为了避免
开店remoteSort: true
和
groupField
为了自动加载,我覆盖了 'Ext.data.AbstractStore'
group
方法
/**
* Groups data inside the store.
* @param {String/Object} grouper Either a string name of one of the fields in this Store's
* configured {@link Ext.data.Model Model}, or an object, or a {@link Ext.util.Grouper grouper} configuration object.
* @param {String} [direction] The overall direction to group the data by. Defaults to the value of {@link #groupDir}.
*/
group: function(grouper, direction) {
var me = this,
sorters = me.getSorters(false),
change = grouper || (sorters && sorters.length)
if (grouper && typeof grouper === 'string') {
grouper = {
property: grouper,
direction: direction || me.getGroupDir()
};
}
me.settingGroups = true;
me.getData().setGrouper(grouper);
delete me.settingGroups;
if (change) {
if (me.getRemoteSort()) {
/**
* when grouping a store only if the store is loaded trigger a load otherwise
* the store would be autoloading.
*/
if(me.isLoaded()) {
me.load({
scope: me,
callback: me.fireGroupChange
});
}
} else {
me.fireEvent('datachanged', me);
me.fireEvent('refresh', me);
me.fireGroupChange();
}
}
// groupchange event must fire when group is cleared.
// The Grouping feature forces a view refresh when changed to a null grouper
else {
me.fireGroupChange();
}
},
});