2013-01-16 76 views
9

如何改變窗體的狀態dirtyfalse如何設置Ext.Form髒狀態?

有什麼樣的Ext.Form.PanelsetDirty(false)方法?

UPD:

我的任務是跟蹤Form髒狀態使停靠SAVE按鈕變爲啓用只要有形式的任何變化。

我跟蹤dirtychange事件有:

init: function() { 
    this.control({ 
     'form': { 
      dirtychange: function(form) { 
       alert('change');  
      } 
     } 
    }); 
} 

但是當我裝載記錄通過loadRecord()方法爲我歌廳chage警報,同時負載記錄和形式變髒後的戰績是加載窗體。

我想重置dirty表格狀態記錄加載後,開始跟蹤dirtychange事件記錄填寫表格。

任何想法?

回答

14

修正

有可用的屬性,它改變了當值獲取設置的原始值。

trackResetOnLoad:真

看到這個JSFiddle

下面舊的答案可能會退出不方便,不過我沒有不變

首先,我不得不說你會沒有找到任何這樣的方法

那是因爲形式還沒有這樣的狀態,字段有它。所有的表單都會迭代每個字段並檢查它是否是髒的。如果有任何字段髒了,將檢查自上次檢查以來該值(髒標記)是否已更改,如果是,則觸發dirtychange事件。那麼這個得救的最後一次檢查(wasDirty

現在讓我們來看看領域的事業,他們真的觸發它:

他們正在檢查onChangeonReset如果字段是髒通過檢查!me.isEqual(me.getValue(), me.originalValue)其中originalValue是值被設置爲時間initValue被調用。

現在有什麼做的「設置」的形式將不再「髒」

遍歷表格的所有領域使用getFields()Ext.form.Basic現在我們把當前值作爲初始值(復位將現在重置爲該值),通過在每個字段上調用initValue就是這樣。

錯誤的代碼去除

編輯

嗯,我修改了我的最後一個代碼從上面

var items = form.getForm().getFields().items, 
     i = 0, 
     len = items.length; 
    for(; i < len; i++) { 
    var c = items[i]; 
    if(c.mixins && c.mixins.field && typeof c.mixins.field['initValue'] == 'function') { 
     c.mixins.field.initValue.apply(c); 
     c.wasDirty = false; 
    } 
} 

和分叉一個working example。該按鈕將保持不活動狀態,直到檢測到任何更改爲止,並​​且如果刪除更改,該按鈕將再次設置爲不活動。玩弄它我猜這是你正在尋找的東西。

+0

看起來像'Ext.Form.Field'也沒有'setDirty()'方法。 –

+0

見更新問題 –

+1

@ s.webbandit看到我的更新答案 – sra

1

有方法reset()。如果在沒有參數的情況下使用,它將保留使用loadRecord()加載的表單數據。

所以,如果您在加載數據後打電話reset(),你的表格應該不會髒了。

myForm.loadRecord(record); 
myForm.reset(); 

我想,dirtychange活動還將通過加載數據被調用,但reset()後,你可以用isDirty()檢查表單。

+1

這是不正確的,它只會保留綁定到窗體的記錄實例,而不是加載的值。 – sra

+0

您是否閱讀過Ext.form.Basic.reset()'的ExtJS文檔?我遇到了這個問題,我想在用戶點擊「關閉」時檢查用戶是否更改了對話框。如果是,我警告用戶,有未保存的更改。我用'loadRecord()'將一些數據加載到表單中。由於我發現'reset()'在加載數據後創建了一個非髒狀態,所以我總是把表單弄髒。 – ChrisLo

+1

你讀過了嗎?但重要的是記錄何時加載,如果一個表單被渲染並顯示爲空,這個值被存儲爲'originalValue','reset()'將這個'originalValue'恢復到該字段。如果設置爲true,布爾參數將擦除記錄引用。因此,如果在字段初始化後加載記錄,重置將擦除字段中的所有值,除非您在字段初始化之前加載記錄,或將trackResetOnLoad屬性設置爲true(將覆蓋originalValue) – sra

1

這裏的一個解決方法是使用一個隱藏字段,並設置它的值以強制形式髒。我們在不包含表單域的小部件中使用它。要將表單設置爲髒,我們只需更改隱藏字段的值,將其設置爲乾淨,然後將其重置爲原始值。