сохранение значений из формы в сетку

#javascript #extjs

#javascript #extjs

Вопрос:

Я создал форму добавления записи в extjs, которая хранит введенные пользователем данные в сетке.

Хорошо, если найден следующий метод получения значений формы из FormPanel

 var formPanel = new Ext.form.FormPanel({...});
var form = formPanel.getForm();
var firstName = form.findField('firstname').getValue();
  

но я хочу скрыть все введенные пользователем значения в JSON и хочу сохранить в панели Grid, а также отправить его на сервер. но с помощью findField мне приходится вручную создавать массив, а затем кодировать его в JSON, поэтому есть ли какой-либо альтернативный способ напрямую считывать значения из формы, преобразовывать их в JSON и сохранять на панели Grid.

Ответ №1:

Когда вы говорите «хотите сохранить в GridPanel», вы бы обновляли существующую запись в хранилище сетки или вставляли бы новую или и то, и другое? (возможно, в зависимости от того, добавят его или обновят?)

Для таких ситуаций BasicForm (переменная форма в вашем фрагменте выше) предоставляет updateRecord( Record record ) метод.

Таким образом, ваши шаги были бы —

 var record = Record.create(...) // in case of insert
  

или

 var record = //obtain record from grid.getStore() in case of update
  

Затем,

 formPanel.getForm().updateRecord(record); //update the passed record with values from the form
  

С последующей фиксацией записи обратно в хранилище-

 grid.getStore().add(record); //in case of insert
grid.getStore().commitChanges(); //incase of update
  

Ссылка — Ext.form.BasicForm , Дополнительные данные.Запись

Определите тип вашей записи —

 MyRecordType = Ext.data.Record.create(['id', 'field1', 'field2']);

var myrec = new MyrecordType();
  

Теперь передайте myrec в updateRecord, как упоминалось выше.

Комментарии:

1. Да, я хочу вставить новое и также хочу обновить существующее.

2. Как мне преобразовать поля формы в запись, поскольку с помощью getvalues у меня может быть массив полей, но как я могу преобразовать его в записи

3. Как я упоминал выше, не используйте get getValues. Вместо этого используйте updateRecord. Когда вы используете updateRecord, ExtJS творит свое волшебство для получения полей и обновляет запись (которую вы передали в updateRecord) за вас.

4. Но как насчет новой записи, в которую мне нужно вставить новую, для этого мне нужно правильно собирать значения из формы, поэтому я спрашивал об этом

5. вы создаете пустую запись из своих определений полей и передаете ее в updateRecord