2013年5月18日 星期六

Extjs form panel煩人的dirtyFlag問題--即便setValues/loadData卻還是Dirty!?

Extjs4的formpanel的dirty偵測在4.1是有問題(希望日後的版本已經改好了)
要如何自己覆寫?一方面是要自己定義一個dirtyFlag,同時也要覆寫onFormDirtyChange事件
最重要的是千萬別忘了要設定「trackResetOnLoad: true
大致如下:
===============================

Ext.define('xxxPrj.view.xxxForm', {
    extend: 'Ext.form.Panel',
     ....
    isFormDirty: false,
    trackResetOnLoad: true,
      ....
    initComponent: function () {
      ...
       ...
       ...
            ,listeners: {
                dirtychange: {
                    fn: me.onFormDirtyChange,
                    scope: me
                }
            }
     ...
     ...
 },
  ...
   ...
     ,onFormDirtyChange: function (basicForm, dirty, options) {
        //there should be a global function to check this flag before switching to other page
        this.isFormDirty = true;
    }
   ...
   ...
   ...
);
================================
如此一來,在外部呼叫這類別的getForm().loadRecord(...)或是getForm().setValues(....);
再設定 xxxpanel.isFormDirty =false;
再偵測 xxxpanel.isFormDirty是否被修改,這才是比較保險的方式(照理說應該自己overwrite loadRecord或是setValues,會更理想)
以上,切記

沒有留言:

張貼留言