extjs 4 designer 1.2 рендеринг сетки - PullRequest
       29

extjs 4 designer 1.2 рендеринг сетки

1 голос
/ 01 сентября 2011

я работаю с дизайнером extjs 1.2.У меня есть кнопка на панели, которая открывает окно при нажатии.В окне есть сетка, для которой я применил рендерер, как показано ниже в файле js.Проблема в том, что рендер работает хорошо, когда окно открывается в первый раз, но когда я закрываю окно и снова открываю его, эффект отключается.

Ext.define('MyApp.view.TestWindow', {
    extend: 'MyApp.view.ui.TestWindow',

initComponent: function() {
    var me = this;
    me.callParent(arguments);

}

 });

==========================================================================

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); 
},

onTestBtnClick:  function(){

    var win = new Ext.create('MyApp.view.TestWindow');
    win.show();
    win.down('#testgrid').columns[0].renderer=function(val){
         return '<span style="color:red;">' + val + '</span>';
        }

}
});

Замечание: Когда я использую рендерер в ui.js, т.е. в файле, созданном при экспорте проекта из конструктора, я не сталкиваюсьвышеуказанная проблема.Как можно решить эту проблему?

1 Ответ

1 голос
/ 22 сентября 2011

Я решил аналогичные проблемы, вызванные параметром конфигурации 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();
}
});
...