2012-03-22 74 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; 
}); 

类似的东西,你的想法;)