2013-05-15 5 views
2

У меня есть кнопка переключения:окно ExtJs не показывает

 var button = new Ext.Button({ 
     tooltip: "Интенсивность", 
     iconCls: "gxp-icon-intensity", 
     enableToggle:true, 
     toggleHandler: function (button, state) { 
      if(state){ 
       alert(state) 
       map.getLayersByName("Интенсивность")[0].setVisibility(true); 
       intWin.show(); 
      }else{ 
       map.getLayersByName("Интенсивность")[0].setVisibility(false); 
       alert(intWin.collapsed); 
       //intWin.close(); 
      } 
     } 
    }); 

И когда кнопка переключена я показываю окно:

var intWin = new Ext.Window({ 
     id: 'intWin', 
     layout: 'fit', 
     title:'Интенсивность', 
     autoScroll:false, 
     width:300, 
     items:[/*intForm*/] 
    }); 

Когда я закрываю окно, а затем кнопку ип -toggles. Но когда я снова нажимаю на него, я не получаю окна. Firebug показывает эту ошибку:

TypeError: b.dom is undefined 

...String(this.enableUrlEncode)?this.enableUrlEncode:"data"]=Ext.encode(b);g.params... 

Что может быть неправильно?

UPDATE

Окей, мой плохой. Я попытался показать уничтоженный элемент.

Но в этом случае:
1 Когда я закрываю окно и уничтожается, любые формы в этом окне также будут уничтожены?
2 Как я могу проверить, что окно уничтожено?

UPDATE2

Теперь я стараюсь эту функцию для создания окна:

function intWinCreate(){ 
     var intWin = new Ext.Window({ 
      id: 'intWin', 
      layout: 'fit', 
      title:'Интенсивность', 
      autoScroll:false, 
      width:300, 
      items:[/*intForm*/] 
     }); 
    }; 

и в обработчике кнопки:

   intWinCreate(); 
       intWin.show(); 

Но я получаю сообщение об ошибке:

ReferenceError: intWin is not defined 

Если я положил intWin.show(); в функцию, то это окно показывает.
Что может быть неправильным?

+0

'intWin' является локальной переменной и не доступна из функции –

ответ

4

Когда элемент разрушен, все внутри него также уничтожается.

В вашем случае вы изменяете поведение по умолчанию для действия закрытия по умолчанию, устанавливая свойство closeAction: 'hide', это приведет к тому, что окно будет скрыто, а не будет уничтожено.

Ex:

var intWin = new Ext.Window({ 
    id: 'intWin', 
    layout: 'fit', 
    closeAction: 'hide', 
    title:'Интенсивность', 
    autoScroll:false, 
    width:300, 
    items:[/*intForm*/] 
}); 

Update:
Это происходит потому, что intWin является локальной переменной в методе intWinCreate. Что вы можете сделать, так это вернуть окно из метода и вызвать шоу на нем.

function intWinCreate(){ 
    return new Ext.Window({ 
     id: 'intWin', 
     layout: 'fit', 
     title:'Интенсивность', 
     autoScroll:false, 
     width:300, 
     items:[/*intForm*/] 
    }); 
}; 

Тогда

intWinCreate().show() 
+0

Я обновить вопрос вы можете посмотреть на него? –

+0

@KliverMax см. Обновление –

+0

Спасибо, действительно помогите/ –

1
  1. Да, форма обычно разрушается слишком
  2. Вы можете проверить, например, intWin.тело - если это нуль - окно уничтожается

UPDATE

Как я вижу, у вас есть один answear уже но у меня есть еще один для вас тоже;) До тех пор, как вы установите

id: 'intWin' 

Вы можете открыть это окно из любого места с помощью

Ext.getCmp() 

, так что вы можете показать его с этим:

Ext.getCmp('intWin').show() 
+0

Я обновляю вопрос, можете ли вы посмотреть на него? –

+0

@KliverMax yep! – igor

Смежные вопросы