1

CFLayout を使用して、Web アプリケーションでタブ構造を作成しています。そのレイアウトの作成後、この関数を呼び出します。

mytabs = ColdFusion.Layout.getTabLayout("#attributes.cflayoutName#");
mytabs.on('tabchange',
    function(tablayout,tab) {           
        var tabtitle = tab.title;
        alert(tabtitle); // Actual code does various useful 'stuff' here.
    }
);

このコードは非常にうまく機能し、ユーザーがタブをクリックするたびにアラートが表示されます。

問題は、「アコーディオン」の CFLayout タイプで同じことをしようとしているということです。ユーザーが見ているアコーディオン ペインを切り替えたときに、イベントを発生させることができません。上記をそのままにして、「tabchange」属性を「expand」、「beforeexpand」、「activate」、「collapse」に変更してみました。

このテストでは、次の単純な JS 関数を使用して、onchange イベント内の JS に起因する問題を回避しています。

mytabs = ColdFusion.Layout.getAccordionLayout("#attributes.cflayoutName#");
mytabs.on('expand',
    function(tablayout,tab) {
        console.log('test');
    }
);

エラーはありません。コンソールには何も記録されません。console.log をアラートに置き換えて、その行の問題を除外しようとしました。

4

2 に答える 2

1

これはコメントするには長すぎたので、回答として追加します

いくつかのグーグル検索の後、私はいくつかの関連する投稿であると思うものを見つけました。ExtJSのアコーディオンにはタブと同じイベントがないように見えます。代わりに、拡大をキャッチするためにリスナーを追加する必要があります。

この投稿を参照してください-そのページに何かが起こった場合は、ここに関連する部分があります:

アコーディオンの子パネルの拡張イベントを聞く必要があります。次のようなことができます。

コード:

    myAccordion.add(myFunc('myTitle'));
    function myFunc(title)
    {
       return new Ext.Panel(
       {
          title: title,
          listeners: { 'expand': {fn: something, scope: foo}}
       }
       );
    }

そして私はまたここSOで別の同様の投稿を見つけました-両方の答えを見てください

アコーディオンにリスナーが必要であることがわかったら、Googleで多くの結果を見つけることができます。extJSのパネルにイベントハンドラーをアタッチするにはどうすればよいですか?

このグーグル検索はあなたにたくさんの例を与えるでしょう。

お役に立てば幸いです。

于 2013-02-07T16:38:21.107 に答える
1

Extライブラリのドキュメントは、この問題の解決策を見つけるのに非常に役立つことがわかりました: ここ

ExtライブラリにはgetComponentメソッドがあり、これを使用すると、expandイベントを追加しようとしているアコーディオンレイアウトパネルを参照できます。これを取得したら、上記で使用している「on」メソッドを使用して、expandイベントを各パネルに個別に割り当てることができます。

for (x=1; x<accordionLayoutArray.length; x++) {
        mytabs.getComponent(accordionPanelName).on('expand',
            function(tab) { ... });
}
于 2013-03-11T14:21:19.397 に答える