1

これまでのところ、私の質問はすべてここで尋ねられ、回答されています。これまでにここにたどり着いたすべてのタイムマシンのヘルプに感謝します。:)しかし、すべては1日で終わるので、ここに私の最初の質問があります:

エラー処理の目的で、追加されたすべての興味深いコンポーネントにいくつかの汎用リスナーをアタッチしようとしています。これは で行うことができますExt.ComponentMgr.all.on('add', function (cnt, cmp) {})。次に、すべてのボタンにクリック リスナーを追加するなど、コンポーネントの種類を調べます。

私が今しなければならないことは、タブパネルに追加されたすべてのパネルにアクティブ化リスナーを追加することです。私の問題は、コンポーネントがタブパネルの直接の子孫であるかどうかを判断する方法と、それを正しい方法で行う方法がわからないことです。

私はすでにこれを試しました:

Ext.ComponentMgr.all.on('add', function (cnt, cmp) {
    if (cmp.ownerCt != undefined && cmp.ownerCt.getXType () == 'tabpanel') {
        console.log (cmp.getXType () + ' in tabpanel with id "' + cmp.getId ());
    }
});

悪い点は、一部の Ext doc に「ownerCt に依存しないでください」と書かれていることです。これは正しいです。他のすべてのコンポーネントには ownerCt がありますが、tabpanels に遅れて追加された場合はパネルではありません。

Ext.Panel.findParentByType() があることは知っていますが、これは上の任意のレベルでコンテナーを検索し、正しい方法ではないと思います (-> パフォーマンス)。

ご回答ありがとうございます。

4

2 に答える 2

0

あなたが言ったように、あなたがそれを行う順序に応じて、構築中のいつでも ownerCt が突っ込まれる可能性があります。それを自動的に処理するタブ パネルのサブクラスを作成してみませんか?

于 2012-12-18T10:19:13.013 に答える
0

私はさらに試行錯誤を繰り返し、自分で解決策を見つけました。私はそれをあなたと共有すべきだと思います。多分誰かがいつかそれを使うことができます:

Ext.ComponentMgr.all.on('add', function (cnt, cmp) {})コンポーネントが作成されただけで、必ずしも別のコンポーネントに追加されるとは限らないため、起動時に ownerCt はもちろん空です。

だから私は次のことをしました:

Ext.ComponentMgr.all.on('add', function (cnt, cmp) {
  cmp.addListener ('added', function (cmp) {
    var parent = cmp.findParentByType ('tabpanel');
    if (parent != undefined) {
      if (parent.items.contains (cmp)) {
        cmp.addListener ('activate', function (cmp) {
          doThings();
        });
      }
    }
  });
}
  • コンポーネントがコンポーネントマネージャに追加されたら ( )、コンポーネントへのnew Ext.Panel()リスナーを作成します。added
  • 追加したら、親がタブパネルかどうかを確認します
  • そうである場合は、コンポーネントが tabpanel の直接の子孫であるかどうかを確認します (= はその項目に含まれています)。
  • ???
  • 利益!
于 2012-12-18T16:49:54.033 に答える