2016-04-26 21 views
0

美好的一天。我正在開發一個Web應用程序,我想檢查我的fieldSet是否髒。我嘗試的第一件事是fieldSet.isDirty();,但由於功能isDirty()無法應用於fieldSet xType,我很快遇到了一個錯誤。爲了仍然使用一個優雅的解決方案,我爲fieldSet寫了一個覆蓋。我的覆蓋看起來像:ExtJS - 重寫FieldSet xType並添加一個函數似乎不起作用?

Ext.define('myApp.override.form.FieldSet', { 
override: 'Ext.form.FieldSet', 

sampleOverride: function(){ 
    console.log("hi! sample override function entered"); 
}, 

checkForDirtyFields: function(){ 
    me = this; 
    return this.getFields().findBy(function(f){ 
     return f.isDirty(); 
    }); 
} 

});如你所見,我寫了2個函數,一個作爲例子,另一個用於檢查fieldSet中的髒字段。在嘗試使用它在我的控制器:

fieldSet.checkForDirtyFields(); 
fieldSet.sampleOverride(); 

我迎了一個錯誤:Uncaught TypeError: fieldSet.sampleOverride is not a function

我現在合法困惑。我爲面板XType編寫了覆蓋,我可以按預期使用它們(清除髒狀態,清除表單中的字段等)。但是,似乎我無法爲字段集製作覆蓋功能。

任何領導和幫助將非常感激。謝謝。

+0

沒有理由不應該工作。整理一個測試用例。 –

+0

我找到了解決辦法。我很快就會發布我的答案。 – Razgriz

回答

0

對不起,令人失望。我找到了一個工作。我的問題是,我有超過1個商店,其數據顯示在窗體中,由fieldSets分隔。問題在於將數據保存在頁面中,並使用isDirty()來檢查是否需要提交任何更改。即使一個商店的fieldSet已更改,檢查form.isDirty()也會返回true。

我所做的是在做了form.updateRecord(record);之後,我檢查了record.isModified();以查看是否有需要提交的更改。如果它返回true,我繼續我的商店同步。如果它返回false,那麼記錄沒有被修改,我繼續我的代碼。

現在,如果你真的想要一個函數調用,我建議製作一個控制器,它需要一個fieldSet/fieldContainer,遍歷這些元素,並檢查元素,如果其中任何一個檢查髒時返回false。