2013-09-24 3 views
0

Я создаю окно одним нажатием кнопки. Если я нажимаю кнопку более одного раза, она открывает окно каждый раз, когда я нажимаю на него. Как я могу проверить сначала, если окно уже открыто? Если открыть, закройте его и если не откроете новый.Как проверить, открыто ли окно перед открытием нового

Я использую следующий код для отображения окна с использованием extjs.

var modiwin = Ext.create('widget.window', { 
    height: 70, 
    width: 110, 
    title: 'Editing', 
    closable: true, 
    autoScroll: false, 
    collapsible: true, 
    //modal:'True', 
    maximizable: false, 
    resizable:false, 
    items: [mdsavebtn,mddelbtn] 
}); 
modiwin.setPosition(175,55); 
modiwin.show(); 

ответ

2

Если код находится внутри функции обработчика или что-то, вот что я обычно делаю:

handler: function(button){ 
    if(!button.modiwin) 
    { 
     button.modiwin = Ext.create('widget.window', { 
      height: 70, 
      width: 110, 
      title: 'Editing', 
      closable: true, 
      autoScroll: false, 
      collapsible: true, 
      //modal:'True', 
      maximizable: false, 
      resizable:false, 
      items: [mdsavebtn,mddelbtn] 
     }); 
    } 
    button.modiwin.setPosition(175,55); 
    button.modiwin.show(); 
} 

Таким образом, кнопка может держаться ссылки на окна и всегда проверить, если он существует, прежде чем создавать его снова.

+0

Даже если кнопка содержит ссылку на созданное окно, но она не знает, когда окно было закрыто, и поэтому продолжает удерживать ссылку даже после закрытия окна. Итак, если вы попытаетесь открыть его снова, нажав кнопку, ничего не появится. –

+0

Вам нужно установить closeAction для «спрятать», чтобы окно не уничтожалось. – Reimius

1

Добавить слушателя на close события окна для отслеживания состояния окна. По существу, что даст что-то вроде следующего. Вероятно, вы должны упорядочить код немного лучше, чем в этом примере, сохраняя ссылку на окно в свойстве класса вместо переменной области видимости, как я, например.

var modiwin = null; 

function showModiWin() { 
    modiwin = Ext.widget('window', { 
     height: 70, 
     width: 110, 
     title: 'Editing', 
     closable: true, 
     autoScroll: false, 
     collapsible: true, 
     //modal:'True', 
     maximizable: false, 
     resizable:false, 
     items: [mdsavebtn,mddelbtn] 
    }); 

    modiwin.on('close', function() { 
     // ensure the old window is cleaned out (in case its close 
     // action just hides it) 
     modiwin.destroy(); 

     // remember we don't have a window anymore 
     modiwin = null; 
    }); 

    modiwin.setPosition(175,55); 
    modiwin.show(); 
} 

Ext.widget('button', { 
    renderTo: Ext.getBody() 
    ,text: "Open window" 
    ,handler: function() { 
     // close the previous window, if any 
     if (modiwin) { 
      modiwin.close(); 
     } 
     showModiWin(); 
    } 
}); 
+0

Спасибо за ответ. Но я не закрываю предыдущее открытое окно и напрямую вызываю функцию для открытия нового окна. для чего нужно закрыть предыдущее и открыть новое? – Pari

2

Вы также можете установить идентификатор окна и проверить WindowManager (используя each()), чтобы узнать, уже ли это окно в наборе. См http://docs.sencha.com/extjs/4.0.7/#!/api/Ext.WindowManager

+0

Спасибо за ответ. Но я не закрываю предыдущее открытое окно и напрямую вызываю функцию для открытия нового окна. для чего нужно закрыть предыдущее и открыть новое? – Pari

+0

Если вы найдете окно в наборе открытых окон, вы можете закрыть его, если хотите. – Zagrev

+0

Вам не нужно закрывать предыдущее окно. Просто пропустите открытие нового окна, если вы обнаружите, что оно уже есть. –

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