2011-06-07 5 views
1

Как еще я могу получить доступ к этому классу, мне нужен мой динамический идентификатор для чего-то другого ... Обычно, если это было // var something = Ext.create (... я бы сделал something.getForm(). Load ...) ???Есть ли другой способ доступа к классу, за исключением Id?

Ext.define('app.winKontakt',{ 
    extend:'Ext.form.Panel', 
    closable:true, 
    id:"myId", <------------------------------------------ID 
    waitMsgTarget: true, 
    border:false, 
    defaults: { 
    anchor: '30%', 
    padding:10 
    }, 
    reader : Ext.create('Ext.data.reader.Json', { 
     model: 'app.contact', 
     record : 'contact', 
     successProperty: '@success' 
    }), 


    ... 

    buttons: [{ 
     text: 'Load', 
     handler: function(){ 

      winId = Ext.getCmp("myId"); <--------------GET 

      winId.getForm().load({ <---------------EXECUTE 
       url: 'app/new.json', 
       waitMsg: 'Loading...', 
       method:"GET" 
      }); 
     } 

    ... 

ответ

1

Я только что начал с ExtJS, поэтому могут быть лучшие практики.

Вы можете назначить элемент itemId компоненту и использовать ComponentQuery для его получения.

Ext.define('app.view.contact.Form', { 
    extend: 'Ext.form.Panel', 
    itemId: 'myId', 

    buttons: [{ 
    text: 'Load', 
    handler: function(){ 
     Ext.ComponentQuery.query('#myId').getForm().load({...}); 
    } 
    }] 
}) 

Другие варианты, чтобы использовать функцию up() от AbstractComponent, чтобы получить форму ограждающую.

Ext.define('app.view.contact.Form', { 
    extend: 'Ext.form.Panel', 

    buttons: [{ 
    text: 'Load', 
    handler: function(){ 
     this.up('form').load({...}); 
    } 
    }] 
}) 

я обычно не ставлю какой-либо код в определении вида, вместо этого я использовать функцию control() в Ext.app.Controller иметь надлежащее разделение MVC:

Ext.define('app.controller.Contacts', { 
    extend: 'Ext.app.Controller', 
    views: ['app.view.contact.Form'], 

    init: function() { 
    this.control({ 
     'button[action=load]': { 
     click: this.loadForm 
     } 
    }) 
    } 

    loadFrom: function() {...} 
}) 

Ext.define('app.view.contact.Form', { 
    extend: 'Ext.form.Panel', 

    buttons: [{ 
    text: 'Load', 
    action: 'load' 
    }] 
}) 

В этом небольшом примере это выглядит как некоторые накладные расходы, но с большей базой кода функция управления весьма удобна для понимания событий, отправленных с комплексного представления на контроллер.

+0

нет, это не работает, но спасибо. Я думаю, мне нужно как-то получить имя класса (app.winKontakt), а затем загрузить в него. –

+0

Извините @Ingol, я забыл использовать # для ссылки на идентификатор элемента. Я обновил ответ и добавил еще две возможности. – Netzpirat

+0

yes, this.up ('form') работает, также просто запускается, поэтому MVC - это, безусловно, следующий шаг, большое вам спасибо! –

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