У меня есть веб-приложение, созданное с использованием среды 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 () после обоих, тогда он работает немного лучше, и тогда я могу иметь две функциональные вкладки, но когда я попытался добавить третью вкладку, она показывает то же поведение, что и выше, и закрывает третью вкладку и не делаетоткрыть новый ..