使用EXTJS将值从视图发送到另一个视图

时间:2014-02-06 11:35:34

标签: extjs extjs4 extjs4.1 extjs4.2 extjs-mvc

我'使用EXT 4.2.0。

我有2个视图:视图1和视图2.

在视图1中,我有一个Ext.grid.Panel(在他的相关控制器中)包含一个selectionchange事件lisetner。

在选择变量被触发后,我进入视图2,其中我有一个表格。 我需要控制视图1中的视图2。

我的意思是通过控制发送值,禁用按钮......

有关发送值问题的信息,我已经尝试了

Ext.getCmp('view2ID').getForm().loadRecord(this.getMyVar());

但这似乎不起作用,我不知道为什么! 请问你能帮帮我吗 ? :)

3 个答案:

答案 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);
}