2012-03-22 59 views
1

我有一個包含許多dijit.form元素和dijit.Editor的表單。表單最初由我從服務器獲得的數據填充。用戶可以更改內容,然後將其提交回服務器。一個經典用例。確定(dojo)dijit.Editor中的內容是否與初始值不同

當用戶提交表單時,我只需要發送已更改的數據。 dijit.Editor的問題在於,即使用戶未做任何更改,它有時也會更改初始內容。例如:

在dijit.editor輸入的初始內容是這樣的:

"Gesegmenteerde rand, 115 mm~Max 13280 U/min, 80 m/sec</br>~Drooggebruik" 

和檢索這樣editorObj.get(「值」)的含量時;它返回:

"Gesegmenteerde rand, 115 mm~Max 13280 U/min, 80 m/sec<br />~Drooggebruik" 

正如你可以看到</BR >改爲< BR/>。我知道最初的價值是錯誤的,但那是因爲消息來源很糟糕,而且這是我無法控制的。

所以我的問題是:有沒有一種簡單的方法來檢查內容是否確實已被用戶更改,而不僅僅是由dijit.Editor本身。

回答

1

我最終什麼事做的是被添加兩個額外的屬性編輯器:

dijitObj.set('originalValue', value); 
dijitObj.set('value', value); 
dijitObj.set('uneditedValue', dijitObj.get('value')); 

在讀出了我用這些來確定改變的東西,在所有的編輯器的值:

var value = dijitObj.get('value'); 
if (dijitObj.get('uneditedValue') === value) { 
    // The value hasn't changed, so we send the original value 
    value = dijitObj.get('originalValue'); 
} 
1

像這樣的東西(在編輯標記)的工作原理:

onkeypress="MyObject.setDirty(true);" 

而就跟蹤它MyObject.isDirty

這樣做的缺點是,如果用戶鍵入編輯器,然後將所有內容修改爲與原始內容完全相同,則該值將會出錯(即true,而內容又回到原始狀態),但它是足以滿足大多數目的。

+0

是的,這將工作,我猜。你可以使用鼠標(使用複製粘貼)來編輯它,但我認爲使用onchange或其他東西可以做到這一點。這有點哈克,但我想沒有一個乾淨的方式。 – koenpeters 2012-03-24 13:14:02

1

那麼,如果你只是想檢查,如果用戶修改的東西你可以試試:

var editorIsDirty = false; 
var someConnect = dojo.connect(myEditor, "onChange", this, function(newValue){ 
    if(originalSource != newValue){ 
     editorIsDirty = true; 
     return; 
    } 
    editorIsDirty = false; 
}); 

類似的東西,你的想法;)