2012-03-22 2 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" 

Как вы можете видеть </ш > изменяется на < бр/>. Я знаю, что первоначальное значение неверно, но это потому, что источник отстой, и это не в моих силах.

Так что мой вопрос: есть ли простой способ проверить, действительно ли контент был изменен пользователем, а не только самим 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

1

Ну, если вы просто хотите проверить, если пользователь изменил то, что вы могли бы попробовать, что:

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

что-то подобное, вы получите идею;)