从即时创建的表单访问 ViewController 中的函数
Accessing functions in ViewController from form created on-the-fly
视图控制器将处于活动状态,但它将控制许多其他视图的一个子视图,因此我认为还会有其他活动视图控制器。
通过即时,基本上表单是由一个完全不同的调度程序创建的,具有组件和处理程序等,视图控制器和表单之间没有直接连接.
视图控制器有几个函数,我需要从中获取结果:
canContinue: function (arg1) {var result = true; /*...*/ return result;}
getStatus: function (arg1, arg2) {var result = 0; /* ... */ return result;}
/*...*/
表示省略代码。所以我想访问视图控制器和这些功能。这些方面的内容:
var controller = /* how to get it? */;
if (!controller.canContinue(p))
alert(controller.status(q, r));
我读到不建议以这种方式直接访问函数,所以尝试触发事件,但我似乎无法取回我需要的结果。
我想我可以给视图控制器一个 itemId
,然后做 Ext.ComponentQuery.query('#itemId')
,但它似乎不起作用。我想视图控制器不是一个组件,这是有道理的。
视图控制器有一个唯一的 class 和别名,如果有帮助的话,一次只有一个视图控制器处于活动状态。
我可能漏掉了一些非常简单的东西。欢迎任何帮助。
我不太确定你的问题。这是我的理解:你们有不同的看法,它们之间没有直接关系。但是你想到达对方视图的控制器。如果是这样,请检查此 fiddle:https://fiddle.sencha.com/#fiddle/urg
否则,我希望你准备一个fiddle,它能说明你的问题。
Ext.define('FirstPanel', {
extend: 'Ext.panel.Panel',
controller: 'FirstPanelController',
layout: 'fit',
itemId: 'firstPanel',
items: [{
xtype: 'button',
text: 'FirstPanel Button',
handler: 'FirstButtonClick'
}]
});
Ext.define('FirstPanelController', {
extend: 'Ext.app.ViewController',
alias: 'controller.FirstPanelController',
FirstButtonClick: function(button) {
var me = this;
var SecondPanelController = me.getView().mainView.down('#secondPanel').getController();
SecondPanelController.FirstButtonClick();
console.log('FirstButton Click');
},
SecondButtonClick: function() {
alert('You are in FirstPanelController');
},
init: function() {
var me = this;
}
});
Ext.define('SecondPanelController', {
extend: 'Ext.app.ViewController',
alias: 'controller.SecondPanelController',
SecondButtonClick: function(button) {
var me = this;
var FirstPanelController = me.getView().up().down('#firstPanel').getController();
FirstPanelController.SecondButtonClick();
console.log('SecondPanelController');
},
FirstButtonClick: function() {
alert('You are in SecondPanelController');
},
init: function() {
var me = this;
}
});
Ext.define('SecondPanel', {
extend: 'Ext.panel.Panel',
controller: 'SecondPanelController',
layout: 'fit',
itemId: 'secondPanel',
items: [{
xtype: 'button',
text: 'SecondPanel Button',
handler: 'SecondButtonClick'
}]
});
Ext.define('MainPanel', {
extend: 'Ext.panel.Panel',
initComponent: function() {
var me = this;
me.items = [
Ext.create('FirstPanel', {
mainView: me
}),
Ext.create('SecondPanel')
]
me.callParent();
}
});
视图控制器将处于活动状态,但它将控制许多其他视图的一个子视图,因此我认为还会有其他活动视图控制器。
通过即时,基本上表单是由一个完全不同的调度程序创建的,具有组件和处理程序等,视图控制器和表单之间没有直接连接.
视图控制器有几个函数,我需要从中获取结果:
canContinue: function (arg1) {var result = true; /*...*/ return result;}
getStatus: function (arg1, arg2) {var result = 0; /* ... */ return result;}
/*...*/
表示省略代码。所以我想访问视图控制器和这些功能。这些方面的内容:
var controller = /* how to get it? */;
if (!controller.canContinue(p))
alert(controller.status(q, r));
我读到不建议以这种方式直接访问函数,所以尝试触发事件,但我似乎无法取回我需要的结果。
我想我可以给视图控制器一个 itemId
,然后做 Ext.ComponentQuery.query('#itemId')
,但它似乎不起作用。我想视图控制器不是一个组件,这是有道理的。
视图控制器有一个唯一的 class 和别名,如果有帮助的话,一次只有一个视图控制器处于活动状态。
我可能漏掉了一些非常简单的东西。欢迎任何帮助。
我不太确定你的问题。这是我的理解:你们有不同的看法,它们之间没有直接关系。但是你想到达对方视图的控制器。如果是这样,请检查此 fiddle:https://fiddle.sencha.com/#fiddle/urg
否则,我希望你准备一个fiddle,它能说明你的问题。
Ext.define('FirstPanel', {
extend: 'Ext.panel.Panel',
controller: 'FirstPanelController',
layout: 'fit',
itemId: 'firstPanel',
items: [{
xtype: 'button',
text: 'FirstPanel Button',
handler: 'FirstButtonClick'
}]
});
Ext.define('FirstPanelController', {
extend: 'Ext.app.ViewController',
alias: 'controller.FirstPanelController',
FirstButtonClick: function(button) {
var me = this;
var SecondPanelController = me.getView().mainView.down('#secondPanel').getController();
SecondPanelController.FirstButtonClick();
console.log('FirstButton Click');
},
SecondButtonClick: function() {
alert('You are in FirstPanelController');
},
init: function() {
var me = this;
}
});
Ext.define('SecondPanelController', {
extend: 'Ext.app.ViewController',
alias: 'controller.SecondPanelController',
SecondButtonClick: function(button) {
var me = this;
var FirstPanelController = me.getView().up().down('#firstPanel').getController();
FirstPanelController.SecondButtonClick();
console.log('SecondPanelController');
},
FirstButtonClick: function() {
alert('You are in SecondPanelController');
},
init: function() {
var me = this;
}
});
Ext.define('SecondPanel', {
extend: 'Ext.panel.Panel',
controller: 'SecondPanelController',
layout: 'fit',
itemId: 'secondPanel',
items: [{
xtype: 'button',
text: 'SecondPanel Button',
handler: 'SecondButtonClick'
}]
});
Ext.define('MainPanel', {
extend: 'Ext.panel.Panel',
initComponent: function() {
var me = this;
me.items = [
Ext.create('FirstPanel', {
mainView: me
}),
Ext.create('SecondPanel')
]
me.callParent();
}
});