ExtJS - элементы FormPanel очищаются и динамически обновляются - PullRequest
3 голосов
/ 27 августа 2009

По сути, у меня есть окно, содержащее панель форм с элементами, которые используются в нескольких местах. Это означает, что элементы formPanel могут незначительно отличаться. (тип органов управления).

Мне удалось динамически очистить и добавить пользовательские кнопки для соответствующей ситуации в окне.

Но у меня возникла небольшая проблема с элементами formPanel.

Заглянув в источник, я обнаружил, что в методе init.Component Ext.Container есть небольшой фрагмент кода:

var items = this.items;
if(items){
    delete this.items;
    if(Ext.isArray(items)){
        this.add.apply(this, items);
    }else{
        this.add(items);
    }
}

Это похоже на то, чего я пытаюсь достичь. Удаление всех текущих элементов и последующий вызов метода formPanel.add снова вызовут этот код:

if(!this.items){
    this.initItems();
}

Здесь все в порядке. И начальная загрузка формы работает отлично. Хотя, когда я скрываю окно и открываю его снова, очистка / перезагрузка элементов отлично работает на моем компоненте, но предыдущие дочерние узлы / элементы все еще присутствуют в dom.children и dom.innerHTML.

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

Я вызываю formPanel.doLayout () после очистки / добавления элементов.

Я также пытался вызвать метод formPanel.remove для каждого элемента, находящегося в данный момент в formPanel, но я по-прежнему получаю отображение дубликатов, и компоновка не выглядит должным образом закрепленной / привязанной, так как в итоге получается горизонтальная полоса прокрутки под каждым элементом.

Что еще я могу сделать, чтобы очистить / перезагрузить dom.children и dom.innerHTML?

Любая помощь будет принята с благодарностью.

Я использую ExtJS 2.1, если это имеет какое-либо значение.

Ответы [ 2 ]

1 голос
/ 28 августа 2009

Если у каждого дочернего контейнера есть свой собственный модуль обновления, то вы должны иметь возможность получить модуль обновления панели, запустить его, и он также будет запускать все его средства обновления детей. Таким образом, вы не удаляете / добавляете компоненты повторно, а скорее «обновляете» их.

Из любопытства, что ты на самом деле пытаешься сделать? Вы просто перезагружаете данные, хранящиеся в полях формы FormPanel?

0 голосов
/ 03 сентября 2009

Означает ли это, что вы не хотите целенаправленно уничтожать формпанель. Содержит ли окно что-либо кроме панели формы.

Если окно содержит единственную formpanel или содержит большую часть formpanel, то я думаю, что желательно закрыть окно, когда вы закроете окно, и разрешить его воссоздание каждый раз, когда вы захотите его.

В этом случае вы можете передать параметр в функцию, которая создает окно, чтобы указать, какой тип элементов управления вы хотите (только для готовности / записи).

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