ExtJS MVC控制器参考选项卡面板';s活动选项卡
我有一个MVC应用程序,它将一个渲染为视口中的唯一项目。在这些选项卡中,我想放置相同类型的组件,对于这些组件,事件处理在所有选项卡中都是相同的 因此,我需要一个ExtJS MVC到活动选项卡,这将导致我在活动选项卡中的组件上执行事件。是否可能有这样一个ExtJS MVC控制器参考选项卡面板';s活动选项卡,extjs,extjs4,extjs-mvc,extjs4.1,Extjs,Extjs4,Extjs Mvc,Extjs4.1,我有一个MVC应用程序,它将一个渲染为视口中的唯一项目。在这些选项卡中,我想放置相同类型的组件,对于这些组件,事件处理在所有选项卡中都是相同的 因此,我需要一个ExtJS MVC到活动选项卡,这将导致我在活动选项卡中的组件上执行事件。是否可能有这样一个ref 我目前的做法是: 获取对选项卡面板的引用 召唤 在活动选项卡中调用组件的控制器事件 是否可以将上述3个步骤封装在一个控制器中ref?会很美:-) 我使用的是ExtJS4.1。假设您的选项卡面板有itemId:'content'。在该面板内,
ref
我目前的做法是:
ref
?会很美:-)
我使用的是ExtJS4.1。假设您的选项卡面板有
itemId:'content'
。在该面板内,您将有一堆选项卡,在每个选项卡上,您将有一堆按钮(例如)。你想在一个控制器中处理所有这些按钮的点击。我理解正确吗
我相信控制器中的简单ref会起作用:
this.control('#content button', {
click: this.buttonClicked
}
});
就个人而言,我认为控制员裁判被高估了。这听起来像是一个简单的例子,您可以使用您描述的一个,但我更喜欢听事件,并从触发组件导航到我需要的组件 在您的情况下,假设选项卡面板包含常规的ext面板,我将执行以下操作:
onButtonClick: function (button) {
var panel = button.up('panel[tab]');
if (panel) {
panel.someMethod();
}
}
up
方法将找到最近的祖先,该祖先属于xtype面板,具有名为tab的属性。如果您有更具体的X类型或已知属性,请改用它们
面板应该是活动面板(否则它的按钮是如何单击的?),但您可以通过转到选项卡面板的另一个级别并在那里获取活动选项卡来检查这一点
onButtonClick: function (button) {
var panel = button.up('panel[tab]'),
tabPanel = button.up('tabpanel'),
activeTab = tabPanel && tabPanel.getActiveTab();
if (panel && panel === activeTab) {
panel.someMethod();
}
}
但我发现了一个问题。继续您的示例,当在多个选项卡上找到
按钮时会发生这种情况。您的意思是什么?您不想限制和控制所有按钮,而只是其中的一部分?我只需要对活动面板的按钮执行事件,而不是对所有面板上的每个按钮执行事件。是的,但是,如果tabPanel未激活,按钮将如何按下?将按下一个按钮,但选择器选择几个组件,我得到了uncaughttypeerror:无法读取未定义的属性“internalId”
。需要进一步调查。有道理,+1回答。我不会马上做这件事,当我回到这件事的时候,我会把它标记为正确的,如果这确实是一条路要走的话。谢谢不客气。一开始我发现extmvc让人困惑,因为控制器是单例的,没有对所需视图的引用。相反,视图触发的事件将视图作为第一个参数传递,因此使用该参数可以找到要操作的视图的正确实例(使用“向上”和“向下”)。没过多久就掌握了窍门。如果遇到麻烦,请继续跟进。