有没有其他方法来访问一个类,除了Id?

时间:2011-06-07 11:40:19

标签: class forms extjs load extjs4

我怎么能访问这个类,我需要我的动态ID用于其他东西...通常如果这是// var something = Ext.create(...我会做something.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 个答案:

答案 0 :(得分: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({...});
    }
  }]
})

另一个选择是使用AbstractComponent中的up()函数来获取封闭形式。

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

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

我通常不会在视图定义中放置任何代码,而是使用Ext.app.Controller中的control()函数来进行适当的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'
  }]
})

在这个小例子中,它看起来很像一些开销,但是使用更大的代码库,控制功能非常便于理解从复杂视图发送到控制器的事件。