Манипулирование ExtJs на лету через процессор
Оказалось проблема насущная:
Скинемся с миру по нитке решениями)
Например:
Создание textfield на лету при создание(редактирование) записи, т.е. При нажатии Добавить, всплывает окно в котором на лету созданные textfield, к примеру 3 штуки, а если это UPDATE то и их значение соответственно, помимо этого есть поля не созданные на лету.
При сохранение отправляется в процессор, в котором поля созданные на лету колбасятся в JSON и записыватся в 1 колонку БД.
Вроде ничего такого сложного, но встает проблема запроса получения массива полей на лету и передача его в вызов Всплывающего окна. Ajax запрос отрабатывает позже чем весь код, поэтому console.log(fieldsArr + ' — массив полей') не выводит массив или return не срабатывает.
Есть процессор, в нем получаю массив полей
Обращаюсь к этому процессору и хочу вставить в функцию определения полей getFields:
Смотрел migx, там все в tpl файлах, т.е. весь js код.
Пока пришла только одна идея сделать по старому — это создать php файл в котором выводится весь js вызова окна и там уже подставляются поля, т.е. объединить весь код выше в php файл.
Кто как решает такие задачи?
Скинемся с миру по нитке решениями)
Например:
Создание textfield на лету при создание(редактирование) записи, т.е. При нажатии Добавить, всплывает окно в котором на лету созданные textfield, к примеру 3 штуки, а если это UPDATE то и их значение соответственно, помимо этого есть поля не созданные на лету.
При сохранение отправляется в процессор, в котором поля созданные на лету колбасятся в JSON и записыватся в 1 колонку БД.
Вроде ничего такого сложного, но встает проблема запроса получения массива полей на лету и передача его в вызов Всплывающего окна. Ajax запрос отрабатывает позже чем весь код, поэтому console.log(fieldsArr + ' — массив полей') не выводит массив или return не срабатывает.
Есть процессор, в нем получаю массив полей
foreach ($arr as $value) {
$fields[] = array(
'xtype' => 'textfield',
'fieldLabel' => $value['code'],
'name' => $value['code'],
'id' => "config.id + '-".$value['code']."'",
'anchor' => "99%",
'allowBlank' => "false",
'value' => ''
);
}
return $this->success('ok',$fields); Обращаюсь к этому процессору и хочу вставить в функцию определения полей getFields:
Ext.extend(Trans.window.CreateItem, MODx.Window, {
getFields: function (config) {
var fieldsArr = '';
MODx.Ajax.request({
url: Trans.config.connectorUrl
,params: {
action: "mgr/tr_data/get_fields",
id_res: MODx.request.id,
createAction: true
}
,listeners: {
success: {fn: function(response) {
//console.log(response);
fieldsArr = response['object'];
console.log(fieldsArr+ 'success');
}, scope: this}
}
});
console.log(fieldsArr + ' - массив полей');
return [{
xtype: 'textfield',
fieldLabel: _('trans_lang_name'),
name: 'name',
id: config.id + '-name',
anchor: '99%',
allowBlank: false,
}, {
xtype: 'textfield',
fieldLabel: _('trans_lang_code'),
name: 'code',
id: config.id + '-code',
allowBlank: false,
anchor: '99%'
}, {
xtype: 'xcheckbox',
boxLabel: _('trans_lang_active'),
name: 'active',
id: config.id + '-active',
checked: true,
}];
},
loadDropZones: function () {
}
});
Ext.reg('trans-item-window-create', Trans.window.CreateItem); Смотрел migx, там все в tpl файлах, т.е. весь js код.
Пока пришла только одна идея сделать по старому — это создать php файл в котором выводится весь js вызова окна и там уже подставляются поля, т.е. объединить весь код выше в php файл.
Кто как решает такие задачи?
Комментарии: 5
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Ух, буду разбираться в ExtJs
Как сделаю отпишу здесь, вдруг кому пригодиться)
Спасибо Сергей, как всегда выручаешь!
Спасибо Сергей Шлокову, он на пальцах мне обьяснил что так как я хотел сделать выше — нельзя.
Последовательность такая:
1. Нажимается кнопка.
2. В функции кнопки вызывается ajax запрос к процессору который выдает поля.
3. Только когда ajax выполнился вызывается окно. В вызов окна сразу подсовываются готовые поля, сформированные из ответа ajax.
Код функции процессора — process ()
Как это в EXT.JS. Тут два запроса ajax, первый получает поля, второй к процессору get который выдает данные об объекте.
В extende окна:
Как то так, наверняка посмотрев через год на этот код будет такая мысль:
«Под чем я был кода писал этот код»