Ошибка добавления и удаления контента в tabPanels - ExtJs - PullRequest
1 голос
/ 11 мая 2011

У меня есть веб-приложение, созданное с использованием среды ExtJS.

У меня есть дерево на западной панели, а в центральной панели - TabPanel.Когда я щелкаю по любому из узлов дерева на западной панели, он пытается добавить форму в центральную панель TabPanel, вызывается следующий код:

var center = Ext.getCmp("center-panel");

var existingpanel = center.get(panelId);
if (existingpanel) {
    center.setActiveTab(existingpanel);
} else {

    var activeTab = center.getActiveTab();

    if (!openNew && activeTab) {
        var removed = center.remove(activeTab, true);
    }

        center.add(c);
        center.setActiveTab(panelId);
        center.doLayout();

}

. При этом извлекается текущий компонент, а затемпроверяет, существует ли вкладка, которую мы пытаемся загрузить, если она существует, она просто активирует эту вкладку, в противном случае она попытается добавить новую.OpenNew - это просто флаг, который передается, чтобы указать, нужно ли его открывать на новой вкладке (например, если пользователь нажимает Ctrl + щелчок по узлу на дереве).

Без использования функциональности OpenNew (например, с помощьютолько одна вкладка) форма работает правильно, и я могу перемещаться между узлами с удалением / повторным добавлением вкладок.

Однако, если я нажимаю Ctrl + щелчок по узлу, чтобы открыть вторую вкладку, вкладка открываетсясначала, так что есть две вкладки, но затем, когда я выбираю другой узел (таким образом, нужно просто удалить недавно добавленную вторую вкладку и заменить ее новой вкладкой для нового узла), он просто закрывает вторую вкладку, но не может добавитьНовая вкладка.

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

В FireBug есть ошибка, но онане очень помогает:

uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOM3Node.compareDocumentPosition]"  nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"  location: "JS frame :: /ext/ext-3.1.1/adapter/ext/ext-base-debug.js?d=1066331810 :: <TOP_LEVEL> :: line 1900"  data: no]

----------- ОБНОВЛЕНИЕ: --------------

это похоже на вызов doLayout () - если я ставлю вызов doLayout () сразу послевызов remove (), тогда он не становится таким же толстым, как вызов add (), и если я помещу его после вызова .add (), он наполовину загружает новую вкладку, но останавливается до завершения.

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

1 Ответ

1 голос
/ 20 мая 2011

Теперь я решил эту проблему - проблема заключалась в том, что я фактически добавлял formPanels, хотя у всех панелей были уникальные идентификаторы, я не думал проверять идентификаторы других компонентов в форме (как предлагает Jad вего комментарии), и формы имели «FieldSets», определенные со статическими идентификаторами, устранение которых решило проблемы.

Я также протестировал проблему в Chrome, используя инструменты разработчика, и обнаружил, что трассировка стека предоставляет гораздо более полезную информацию, чемошибка, предоставленная FireBug, так что теперь я буду использовать оба!

...