2014-09-05 34 views
0

我们有一个表单面板,它包含一个可编辑的网格和一个'保存'按钮。捕获FormPanel出口

PROJ.RWA = Ext.extend(Ext.form.FormPanel, 
{ 

    initcomponent:function(){ 
.... 
..... 

var rwa_config = { 
     ....... 
     tbar:rwa_tbar, 
     items: [ 
      borr_grid, nonBorr_grid 
      ], 
     buttons: [{ 
       text: 'Save', 
       handler:this.getValues 
     }, 
     .....] 
     .......    
    }; 

    Ext.apply(this, Ext.apply(this.initialConfig, rwa_config)); 
    PROJ.RWA.superclass.initComponent.call(this, rwa_config); 
    } 

} 

该组件从index.html的
我们需要确保用户获得一个警告时,他是从导航这个面板了,如果有在电网未保存的更改加载。
如果网格是'脏'并且'保存'尚未被点击 - 当用户正在导航到其他页面/面板时,我们应该弹出警告。
我们该怎么做?

回答

0

您可以向事件beforedestroy添加侦听器,或者如果它正常关闭,然后查看beforeclose

这将是这个样子:

listeners: { 
    beforedestroy: function(panel, eOpts){ 
     //check if there are unsaved changes (and show dialog or smoething) 
    } 
} 

您也可以return false;在“之前” -event,以防止实际行动。

也看看beforedestroy doc

0

第一:我猜,点击保存时,你会调用一个返回成功的操作:true。然后,商店中的所有记录都标记为“不脏”。

所以,你只需要检查网格是否有脏记录。

取决于精确的方法,你可以如何 “离开” 的网格,你可以听一个或多个以下事件:

  • beforeclose
  • beforedestroy
  • beforehide

在处理程序中,你会这样做:

onGridExit:function(grid) { 
    if(grid.getStore().getUpdatedRecords().length>0) { 
     Ext.MessageBox.alert('Unsaved changes','Would you like to save your changes?',function() { 
      ... 
     }); 
     return false; 
    } 
}