Я решил аналогичные проблемы, вызванные параметром конфигурации closeAction
моего Ext.Window
(* в вашем случае MyApp.view.TestWindow
) , установленного на hide
вместо destroy
(По умолчанию Ext JS 4) . Ваш проиллюстрированный обработчик события нажатия кнопки создает новый Ext.Window
(MyApp.view.TestWindow
в вашем случае) каждый раз, когда он запускается. Если эти экземпляры не созданы и не уничтожены должным образом, вы можете столкнуться с DOM ID
конфликтом и нежелательными результатами.
Если ваша цель состоит в том, чтобы сохранить такие экземпляры, лучшим подходом, независимо от состояния ваших текущих параметров конфигурации, будет переместить вашу логику создания экземпляров в глобальную область и управлять только show
ing и hide
Использование этого компонента в обработчике событий нажатия кнопки.
Поскольку вы не предоставили базовую логику MyApp.view.TestWindow
, мне остается только предположить, что основная причина вашей проблемы связана с комбинацией либо неправильно настроенных параметров конфигурации и / или управления экземплярами компонентов, что в конечном итоге приводит к конфликту компонентов для того же DOM ID
.
Еще одна вещь, о которой следует помнить, это использование статически определенных опций id
config. Если вы статически определяете параметр конфигурации id
для любого компонента, вы должны убедиться, что эти компоненты являются либо одиночными, либо их экземплярами назначены в глобальной области для повторного использования. Опять же, все это сводится к правильному управлению компонентами.
Наконец, также возможно, что использование моего предложения не выявит каких-либо явных проблем, характерных для вашего MyApp.view.TestWindow
. В этом случае проверьте и убедитесь, что ни один из базовых MyApp.view.TestWindow
дочерних компонентов (сетка, модель столбца, столбец и т. Д.) не является виновником.
EDIT
Ниже приведен пример:
Ext.define('MyApp.view.TestPanel', {
extend: 'MyApp.view.ui.TestPanel',
initComponent: function() {
var me = this;
me.callParent(arguments);
Ext.data.StoreManager.lookup('Test').load();
me.down('button[id=testbutton]').on('click',me.onTestBtnClick,me);
me.testWindow = new Ext.create('MyApp.view.TestWindow');
me.testWindow.down('#testgrid').columns[0].renderer=function(val){
return '<span style="color:red;">' + val + '</span>';
}
},
onTestBtnClick: function(){
var me = this;
me.testWindow.show();
}
});