2012-07-11 39 views
3

我有有渲染为视口中的唯一项目一Tab Panel的MVC应用程序。在选项卡中,我想放置相同类型的组件,对于这些组件,所有选项卡中的事件处理都相同。ExtJS的MVC控制器裁判Tab平板的活动标签

所以我需要一个ExtJS MVC Controller ref的活动标签,这将导致我的活动选项卡来执行的组件的事件。有没有可能有这样的ref

我目前的做法是这样的:

  1. GET参考Tab平板
  2. 呼叫getActiveTab()
  3. 呼叫活动标签控制器事件的​​组件

是否有可能封装在一个控制器上面的3个步骤ref?将美丽 :-)

我使用ExtJS的4.1。

回答

3

就个人而言,我认为裁判控制器是高估了。这听起来像一个简单的例子,您可以在描述时使用它,但我更喜欢听该事件,并从击发组件导航到我需要的组件。

在你的情况,假设你的标签面板包含普通分机板,我会做类似如下:

onButtonClick: function (button) { 
    var panel = button.up('panel[tab]'); 

    if (panel) { 
     panel.someMethod(); 
    } 
} 

up方法会发现,是的xtype面板的最近的祖先,并有一个属性命名标签。如果您有更具体的xtypes或已知属性,请改用它们。

该面板应该是活动的(否则它的按钮是如何点击的?),但是您可以通过将up另一级别转到标签面板并在那里获取activeTab来检查该面板。

onButtonClick: function (button) { 
    var panel = button.up('panel[tab]'), 
     tabPanel = button.up('tabpanel'), 
     activeTab = tabPanel && tabPanel.getActiveTab(); 

    if (panel && panel === activeTab) { 
     panel.someMethod(); 
    } 
} 
+0

有意义,请将您的答案+1。我不会马上处理这个问题,当我回到它的时候将会标记为正确的,如果这确实是一条路。谢谢! – 2012-07-13 12:45:37

+1

不客气。起初我发现EXT MVC令人困惑,因为控制器是单身人士,并且没有引用你想要的视图。相反,视图触发的事件作为第一个参数传递视图,所以使用它来找到想要操作的视图的正确实例(使用向上和向下)。没有太长的时间来获得。如果遇到麻烦,请跟进。 – 2012-07-13 13:33:25

+0

+1您的解决方案对我有帮助。谢谢 – vedvrat13 2013-02-01 07:31:57

1

假设你的TabPanel有itemId: 'content'。在该面板内部,您将拥有一堆选项卡,每个选项卡上都会有一堆按钮(作为示例)。而你想要在一个控制器中处理所有这些按钮的点击。我理解正确吗?

我相信,你的控制器内简单的裁判将工作:

this.control('#content button', { 
     click: this.buttonClicked 
    } 
}); 
+0

虽然发现一个问题。发生这种情况时,继续使用您的示例,在多个选项卡上找到“按钮”。 – 2012-07-11 16:44:18

+0

你是什么意思?你想限制和控制不是所有的按钮,但只是其中的一些? – sha 2012-07-11 16:47:33

+0

我需要为*活动面板*的按钮执行事件* only *,而不是所有面板上的每个按钮。 – 2012-07-11 16:48:46