2013-12-06 7 views
1

У меня есть сетка, и я пытаюсь открыть представление с идентификатором «popup» типа «Ext.form.panel», чтобы отредактировать одну запись из сетки.Sencha architect popup window

Я закончил с следующим:

onGridpanelSelect: function(rowmodel,record,index,e0pts) { 
    if(Ext.getCmp('popup')) var sample = Ext.getCmp('popup'); 
    else var sample = Ext.create('MyApp.view.popup'); 
    sample.update(record.data); 
    // Ext.Viewport.add(sample); 
    Ext.Viewport.setActiveItem(sample); 
} 

Но Firefox говорит мне, что ни Ext.Viewport.add, ни Ext.Viewport.setActiveItem являются функциями. Что именно он пытается мне сказать?

(TypeError: Ext.Viewport.add is not a function или TypeError: Ext.Viewport.setActiveItem is not a function, в зависимости от того, комментарий есть)

ответ

3

В Сенча Touch, Ext.Viewport одноэлементно, но не в ExtJS. И add не является статическим методом, поэтому его можно вызвать только из экземпляра Viewport.

Если вы уже создали окно просмотра, вы можете получить ссылку на него с помощью компонента запроса:

var viewport = Ext.ComponentQuery.query('viewport')[0]; 
// Now, we've got an instance! 
viewport.add(...); 

Теперь, учитывая имя компонента (всплывающее окно), я бы не пытайся добавьте его в окно просмотра, но я бы отобразил его в модальном окне ... Вы знаете, как всплывающее окно;)

var sample = Ext.getCmp('popup') || new MyApp.view.popup; 

sample.update(record.data); 

var win = Ext.widget('window', { 
    title: "Sample" 

    ,autoShow: true 
    ,modal: true 

    ,layout: 'fit' 
    ,items: [sample] 

    ,width: 300 
    ,height: 300 

    ,buttons: [{ 
     text: "Ok" 
     ,handler: function() { 

      // maybe you'll want to process your form here 

      // remove your component before closing the window 
      // to avoid having it auto destroyed 
      win.remove(sample, false); 

      win.close(); 
     } 
    }] 
});