#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