Есть ли другой способ доступа к классу, кроме Id? - PullRequest
1 голос
/ 07 июня 2011

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

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 Ответ

1 голос
/ 07 июня 2011

Я только начал с 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'
  }]
})

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

...