Обеспечьте соблюдение уникальных значений ключей в сетках ExtJs 4

Я разрабатываю сетку в ExtJs 4, которая будет представлять структуру данных Map. У меня есть собственный редактор ячеек для столбца key в сетке. Я хочу обеспечить, чтобы key был уникальным среди всех ключей. Как мне это сделать?

На данный момент я пытаюсь настроить специальный редактор текстового поля с пользовательским валидатором, который проверяет, является ли введенное пользователем значение key уникальным, сравнивая его со значениями хранилища данных. К сожалению, это приводит к тому, что хранилище данных не знает, какая запись является «текущей», и поэтому не знает, какую запись исключить при проверке на наличие дубликатов.

^ Сбивает с толку, верно? Вот почему я думаю, что делаю это неправильно.


person applepie    schedule 31.07.2012    source источник


Ответы (1)


Это очень хороший вопрос, и в итоге я сделал то же самое, что и вы. Чтобы обработать текущую запись, чтобы я мог исключить ее из поиска, я добавил что-то подобное в функцию проверки vtype:

unique: function (val, field) {
  // If field has not been changed - don't care about anything else
  if (field.originalValue === undefined || val === field.originalValue) {
    // _trace('unique - original value has not changed'); 
    return true;
  }

  if (!field.isDirty()) {
    // _trace('unique - field is not dirty'); 
    return true;
  }

  // Check you store here...
},
uniqueText: 'Duplicate'

Еще одно замечание - если вы попытаетесь использовать тот же валидатор в диалогах (в отличие от редактора строк сетки) - вам нужно будет добавить больше проверок, потому что originalValue не всегда будет правильно установлен (по крайней мере, я должен был сделать это в 4.0.7). в моем приложении).

person sha    schedule 01.08.2012
comment
Спасибо за ответ! я раньше не видел vtype, и я изучил его. Но я не мог узнать, что такое field. Можете ли вы объяснить, что передается в unique: function(val,field) в контексте сеток Ext Js? Большое спасибо! - person applepie; 01.08.2012
comment
field будет ссылкой на редактор. Когда вы используете roweditor для сетки, он фактически создает одно Ext.form.field.Textfield для каждого столбца. И val, очевидно, будет значением, которое вам нужно проверить. - person sha; 01.08.2012
comment
круто, спасибо ша! Я попробую, и если никто не опубликует другое решение, и оно сработает, я приму его. - person applepie; 02.08.2012