1
私は単純なオーバーライドクラスを持っています。これは次のようになります。Sencha Extjs - メソッドを適切にオーバーライドしますか?
Ext.define('Ext.overrides.form.Panel',{
override: 'Ext.form.Panel',
constructor: function() {
this.callParent(arguments);
},
listeners: {
afterrender: {
fn:function (component, eOpts) {
var fields = component.getForm().getFields();
var field = fields.getAt(0);
if(typeof field !== 'undefined' && field.isFocusable()) {
//need to wait before you can focus a field.
Ext.defer(function() {
field.focus(true,200);
},1);
}
}
}
}
});
ご覧のとおり、フォームがレンダリングされると、フォームの最初のフィールドにフォーカスが入るように、afterRenderイベントをオーバーライドしようとしています。 これは動作しますが、アプリケーション内のいくつかのフォームでは、アフターレンダーイベントにコードを実装しています。私が上で定義したこの方法をオーバーライドしているようです。
私はこのコードをこれらのフォームにコピーできますが、上記のコードをthis.callParent(arguments)のようなものを使用して呼び出すことができない場合は、それを改善できません。それらの形式で? 私は実際にそれを試みましたが、問題はそれらのフォームのレンダリング後のコードがビューコントローラスコープ内にあることです。したがって、 'this'リファレンスは間違ったExt.Baseスコープを持ちます。
を。この回答は機能します。しかし、このような方法でリスナーを追加するのは、クラスの初期設定の一部とするのに対して、なぜ機能するのでしょうか? – Yakaqweri
on()はaddlistenerの略語なので、同じイベントに複数のリスナーを追加できるからです。 – Yakaqweri
あなたの質問のように 'listeners'を使うと、フォームの中には単にそれを上書きするだけです。 –