ExtJs: присоединение полей формы к объектам в памяти - PullRequest
0 голосов
/ 18 ноября 2009

Я не понимаю какой-то ключевой смысл ExtJs, поэтому этот вопрос о том, чтобы направить меня к этому. Я думаю, что пытаюсь использовать ExtJs неправильно.

Я пишу приложение, которое позволяет пользователю добавлять динамическое число дочерних записей. Давайте представим, что я описываю комнату, и пользователь может нажать кнопку «Добавить дверь» и добавить FormPanel двери к списку FormPanels, где они могут указать детали двери.

Я храню детали двери в виде объекта в памяти и хочу связать результаты выбора значения в поле со списком, текстовом поле и т. Д. С полем на правильном объекте. Мой план состоит в том, чтобы затем иметь возможность отправить объект на сервер с помощью JSON / XHR / REST и сохранить его. У меня есть другая обработка, которая идет на объект двери (например, пространственная), поэтому я хочу иметь свою собственную.

Пока ничего, что я пробовал, не сработало. Я могу перехватить событие select, но либо моя область действия - это элемент управления полем (в этом случае я не могу получить доступ к объекту двери), либо область действия - это объект двери, и я не могу получить доступ к значению элемента управления поля.

Я немного запутался, потому что ExtJs говорит о связывании со скрытыми полями. Тем не менее, кажется, что требуется одно и только одно поле с данным идентификатором для данного элемента управления. Это означает, что я не могу иметь более одной двери, если область действия этого идентификатора не ограничена FormPanel.

Наконец, в идеале, у меня должен быть общий магазин, который был бы обновлен новыми записями в комбинированном ящике цветов, чтобы его могли использовать несколько дверей. Если кто-нибудь знает примеры этой работы, я был бы признателен.

var doorDataEditor = new Ext.form.FormPanel({
    labelWidth: 75,
    width: 350,
    defaultType: 'textfield',
    items: [{
            fieldLabel: 'colour',
            name: 'colour',
            xtype: 'combo',
            store: colourStore,
            displayField: 'name',
            typeAhead: true,
            mode: 'local',
            triggerAction: 'all',
            emptyText: 'Select the colour for this door...',
            selectOnFocus:true,
            value: door.colour,
            listeners:{
                scope: door,
                 'select': function(ev, target) {

                    alert(target.findField('name')); this.colour = target.value;
                } 
            }
        }]});

Заранее спасибо за помощь.

1 Ответ

1 голос
/ 18 ноября 2009

Вы используете общий формат обработчика событий DOM (ev, target), но это не универсальное событие DOM. Для компонентов вы должны найти в API документах соответствующую сигнатуру события для конкретного компонента. В этом случае для ComboBox установлено значение ( Ext.form.ComboBox combo, Ext.data.Record record, Number index ). Вы должны иметь возможность получить значение из record.data.colour (при условии, что именно так у вас отображаются ваши записи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...