повторный рендеринг магазина combox в Gwt-Ext - PullRequest
4 голосов
/ 18 сентября 2008

Я создал панель формы, и я рендерил несколько полей со списком на панели с хранилищем, которое заполняется через обработчик ответа. проблема, если я хочу сделать панель снова, она отображает поля со списком без хранилища, хотя я перестраиваю панель. я попытался отладить, чтобы выяснить причину и, что удивительно, хотя для поля со списком Store является нулевым при вызове - comboBox.setStore (store) он проверяет свойство (isRendered) и находит его истинным, а следовательно, не добавляет хранилище но просто сохраните существующее хранилище, которое по-прежнему равно нулю.

Я видел эту проблему в другом сценарии, где я создал складной набор полей, содержащий Combobox. При сворачивании и максимизации набора полей магазин исчезает по тем же причинам.

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

Ответы [ 4 ]

2 голосов
/ 20 сентября 2008

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

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

Следовательно, простое решение заключается в следующем: Компонент comp = Ext.getCmp (id); если (комп! = ноль) comp.destroy ();

это фактически работало как ссылка, из-за которой свойство (isRendered () ComboBox, возвращающее true, больше не доступно, и, следовательно, я снова могу правильно увидеть магазин.

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

0 голосов
/ 18 сентября 2008

ComboBox.view.setStore () должен помочь.

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

view_plugin = {

     init: function(o) {

          o.setNewStore = function(newStore) {
              this.view.setStore(newStore);
          };
     }
};

и добавьте строку

plugins: view_plugin,

в Combobox config.

Затем вы можете вызвать combobox.setNewStore (newStore) позже в коде.

0 голосов
/ 18 сентября 2008

Вам нужно написать:

field = new ComboBox({plugins: view_plugin});

В вашем случае и определите мой код view_pligin где-то раньше. Или вы можете даже встроить его:

field = new ComboBox({plugins: { code of plugin });

Внутри плагина все частные свойства и методы доступны / доступны для изменения.

Вы также можете в любое время изменить магазин, используя field.setNewStore(store).

0 голосов
/ 18 сентября 2008

Вы пробовали doLayout() метод FormPanel?

...