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

这对于评论来说太长了,所以添加作为答案

经过一些谷歌搜索后,我发现了一些我认为是相关的帖子。看起来好像 Ext JS 中的手风琴没有与选项卡相同的事件。相反,您需要添加一个侦听器以捕捉扩展。

请参阅这篇文章-如果该页面发生问题,这里是相关的部分:

您需要收听手风琴中子面板的展开事件,您可以执行以下操作:

代码:

    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 方法,它允许您引用您尝试添加展开事件的手风琴布局面板。一旦你有了这个,你可以使用上面使用的“on”方法将展开事件单独分配给每个面板。

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