我'使用EXT 4.2.0。
我有2个视图:视图1和视图2.
在视图1中,我有一个Ext.grid.Panel(在他的相关控制器中)包含一个selectionchange事件lisetner。
在选择变量被触发后,我进入视图2,其中我有一个表格。 我需要控制视图1中的视图2。
我的意思是通过控制发送值,禁用按钮......
有关发送值问题的信息,我已经尝试了
Ext.getCmp('view2ID').getForm().loadRecord(this.getMyVar());
但这似乎不起作用,我不知道为什么! 请问你能帮帮我吗 ? :)
答案 0 :(得分:0)
选项1:正如@Lorenz所说,在你的控制器中调用方法
selectionchange:function( record, selected, eOpts ){
//getController
controller = globalVar.getController('Controller');
controller.onSelectionChangeEvent(record);
}
选项2:您可以在创建实例时将config对象传递给View2 在view1中,提及config属性;
//View 1....
config :{
recordObj : ''
},
.........
selectionchange:function( record, selected, eOpts ){
var form = Ext.create('My.view.Form',{recordObj :record});
}
............
//Your View2 might be like
Ext.define('My.view.Form', {
extend : 'Ext.form.Panel',
config :{
recordObj : ''
},
initComponent : function() {
var record = this.getRecordObj();
this.items = [
];
this.callParent();
//Set form values
this.getForm().setValues(record);
}
});
答案 1 :(得分:0)
问题很安静很困难:从View1发出的动作被执行了befaure view 2 is rendred!即使我的代码有人这么想:
ControllerOfView1
{
CodeToLoadView2;
InstructionsToControlView2;
}
解决方案是在我的View2上添加一个监听器并在afterrender中进行参数化。 所以代码就变成了:
afterrender: function() {
this.loadRecord(this.getMyVar2());
}
答案 2 :(得分:0)
您可以使用自定义触发事件,因为您可以发送所需的数据和组件参考。
app.fireEvent('selectionChanged',view1.grid);
你需要在view2中监听selectionChanged。
之类的东西app.on("selectionChanged",onSelectionChanged)
onSelectionChanged : function(grid){
console.log(grid);
}