2013-04-22 6 views
6

をクリックし、マウスとは異なり、私はログインコントローラを持っている、あなたは、マウスやキーを押して、ログインをクリックすることができますキーを入力し、次のように:私が使用している場合ExtJSには、手動でクリックしてイベントを発射、ボタンparamがそう

Ext.define('My.controller.Login', { 
    extend: 'Ext.app.Controller', 

    init: function(application) { 
     this.control({ 
      "#idLogin button": {click: this.onButton}, 
      "#idLogin form > *": {specialkey: this.onKey} 
     }); 
    }, 

    onButton: function(button, e, eOpts) { 
     var win = button.up('window'); // the login window 
     //do more stuff... 
    }, 

    onKey: function (field, el) { 
     if (el.getKey() == Ext.EventObject.ENTER) //ENTER key performs Login 
      Ext.getCmp('#idLogin button').fireEvent('click'); 
    } 
}); 

私が実現マウスがログインボタンをクリックすると、onButton機能は正常に動作します。button.up()は私にログインwindowを返します。私が押された場合

ただし、キー入力して、この場合はonButton火災アップができますが、マウスでクリックしたときに受信buttonパラメータとしてパラメータbutton同じではありません、fireEvent('click')を行うonKey機能を発射!そして今度は、button.up()関数は未定義です。

質問:なぜ、fireEvent('click')が私に別のボタンパラメータを与えるのですか?

答えて

14

あなたはそのようfireEvent機能を使用する必要があります。

var myBtn = Ext.getCmp('#idLogin button'); 

myBtn.fireEvent('click', myBtn); 

はそれを試してみます。

+1

ありがとうございました:Dスポットがあり、非常に速い@! – Tom

+0

あなたは大歓迎です、どうかお気軽にご同意ください。 – Patrick

+0

なぜ 'button.click()'がないのですか? – Geo

7

ボタンクリックイベントは、フレームワークによって起動される合成イベントです。ボタンインスタンスとイベントオブジェクトを渡します。 fireEventは、「このイベントが発生したことを、これらの引数とともに通知する」という意味で、「基になるボタンにクリックイベントを発生させる」ではありません。

だから、あなたが使用する必要があるだろう:

button.fireEvent('click', button);

しかし、これは本当にあなただけの間接の余分なレイヤを追加している、意味がありません。

なぜ出ていない抽象的:

Ext.define('My.controller.Login', { 
    extend: 'Ext.app.Controller', 

    init: function(application) { 
     this.control({ 
      "#idLogin button": {click: this.onButton}, 
      "#idLogin form > *": {specialkey: this.onKey} 
     }); 
    }, 

    onButton: function(button, e, eOpts) { 
     this.doWindowFoo(); 
    }, 

    onKey: function (field, el) { 
     if (el.getKey() == Ext.EventObject.ENTER) //ENTER key performs Login 
      this.doWindowFoo(); 
    }, 

    doWindowFoo: function() { 
     // Assumes the window has an id idLogin, there are several other ways to get a reference 
     var win = Ext.getCmp('idLogin'); 
    } 
}); 
+0

詳細な回答ありがとうございました!インディアンは短い秒で60秒でそれを打つXD – Tom

+1

答えは "間違っている"、あなたはボタンでイベントを発射すべきではありません。それは正しい方法ではありません。 –

+0

EvanT、彼のXDから「受け入れる」ことはいいことではありませんが、ベストプラクティスの機能を再構築することに深く関わっています。あなたは層を平らにしました。私はあなたに10以上の乾杯を与えることができればいいと思っています!〜 – Tom

3

用途:

var button= Ext.getCmp('#idLogin button');  
button.fireHandler(); 
+0

"fireHandler"はプライベート関数なので、依存しないでください。 http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.button.Button-method-fireHandler – BillyTom

0

より一般的な方法:

document.querySelector("what-ever-el-selector").click(); 

のExtJS 4.2.6

乾杯

でテスト
関連する問題