2011-06-07 13 views
1

他のどのように私はこのクラスにアクセスすることができます、私は何かのために私の動的IDが必要...通常これは// var何か= Ext.create(...私はsomething.getForm()ロードを行うだろう... )???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({...}); 
    } 
    }] 
}) 

別のオプションは、外側のフォームを取得するためにAbstractComponentからup()機能を使用することです。この小さな例では

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' 
    }] 
}) 

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

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

私は通常、適切なMVC分離を持っている代わりに、私はExt.app.Controller内control()機能を使用し、ビュー定義で任意のコードを配置しないでくださいオーバヘッドのように見えますが、コードベースが大きくなると、複雑なビューからコントローラに送信されるイベントを理解するのに便利です。

+0

いいえ、これは動作しませんが、ありがとうございます。私は何とかクラス名(app.winKontakt)を取得してからロードする必要があると思います。 –

+0

申し訳ありません@Ingol、アイテムIDの参照に#を使用するのを忘れていました。私は答えを更新し、2つの可能性を追加しました。 – Netzpirat

+0

はい、this.up( 'form')もうまくいきますので、MVCは間違いなく次のステップです。ありがとうございます! –

関連する問題