Ext-all.js не отвечает при показе / стыковывающихся столбцов сетки
Вопрос
Я столкнулся с проблемой, в которой файл ext-all.js зависает при попытке показать / скрыть столбцы сетки.
Я использую Extjs 4.1.2 на Mozilla Firefox 25.0.ОС - Ubuntu 12.10, просто чтобы уточнить.
Когда пользователь редактирует ряд через плагин, скрытые поля отображаются только так, чтобы пользователь мог их редактировать.После того, как редактирование завершено, эти столбцы снова становятся скрытыми.
Controller.js:
var hiddenColumns = []; //global array for storing columns
init: function() {
this.control({
...
'myGrid': {
beforeedit: function() {
me.columnsVisibility('show');
},
afterrender: function(){
var me = this,
formDataPanel = me.getFormDataPanel(),
activeGrid = formDataPanel.getLayout().getActiveItem();
for (i=0; i < activeGrid.columns.length; i++) {
if (activeGrid.columns[i].hidden) {
Ext.Array.push(hiddenColumns, activeGrid.columns[i]);
}
}
},
edit: function(editor, e) {
var me = this,
usersStore = me.getStore('Users'),
alias = me.getUserAlias(),
record = usersStore.findRecord('email', alias, false, true, true),
fdupdate = record.get('fdupdate');
me.columnsVisibility('hide');
if (fdupdate == 't') {
try {
e.store.sync();
}
catch (e) { }
e.record.commit();
} else {
var store = me.getStore('Inspection');
store.rejectChanges();
Ext.Msg.alert('Alert!','This function is not currently available for you');
}
},
...
}
});
},
...
columnsVisibility: function(visible){
for (var i=0; i < hiddenColumns.length; i++) {
if (visible == 'hide') {
hiddenColumns[i].hide();
} else if (visible == 'show') {
hiddenColumns[i].show();
}
}
},
...
.
mygrid.js:
initComponent: function() {
var filters = {
ftype: 'filters',
// encode and local configuration options defined previously for easier reuse
encode: false, // json encode the filter query
local: true
},
Ext.apply(this, {
title: 'Inspection',
id: 'inspection', // This is required since title can be changed by filter functions to update status of the grid.
store: 'Inspection',
features: [filters],
selModel: Ext.create('Ext.selection.CheckboxModel', { checkOnly: true }),
plugins: [
Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 2
})
],
columns: [{
text: 'ID',
width: 35,
dataIndex: 'id'
},{
text: 'Record Name',
dataIndex: 'record_name',
width: 70,//flex: 1,
hidden: true,
editor: {
queryMode: 'local',
displayField: 'record_name',
valueField: 'record_name',
editable: false
},
filter: {
type: 'string'
}
},{
text: 'Date Created',
dataIndex: 'date_created',
width: 150,
filter: {
type: 'string'
}
}]
});
this.callParent(arguments);
}
});
.
Пока мой код работает как предполагаемое, он заставляет мой браузер зависеть от умеренного количества времени, прежде чем подсказать мне сообщение об информировании о сценаре.
Я не уверен относительно того, находится ли эта проблема с моей версией Extjs, моим кодом или моим браузером.Если кто-то может помочь, это будет очень ценится.
Решение
Скрыть и шоу могут быть дорогими операциями, поскольку они включают манипулирование DOM и последующим браузером, отражающим.Для пары строк не создает значительную задержку, но по мере роста ряда строк вы можете испытывать замедление.
Я, вероятно, подумал бы, чтобы открыть отдельное окно «Ext» с формой, содержащей все поля для редактирования, не отображающихся и скрывающихся столбцов всех рядов сетки.