Добрый день, есть 2 вкладки, одну из которых необходимо скрывать при условии. Но при удалении выделенной вкладки из коллекции tabscollection почему то остаются элементы этой текущей вкладки.
var TabCandidatesList = tabsCollection.contains("TabCandidatesList") ? tabsCollection.get("TabCandidatesList"):false; if (!TabCandidatesList) tabsCollection.insert(0, "TabCandidatesList", Terrasoft.TabCandidatesList); var TabConditions = tabsCollection.contains("TabConditions") ? tabsCollection.get("TabConditions"):false; if (TabConditions) { Terrasoft.TabConditions = TabConditions; tabsCollection.removeByKey("TabConditions"); }
Как это можно сделать правильно? Хотелось бы при изменении условия вставить вкладку и сразу отобразить ее.
Нравится
В твоем случае возможно лучше делать так...
//hide closeTabs: function() { var tabsCollection = this.get("TabsCollection"); tabsCollection.eachKey(function(tabName, tab) { var tabContainerVisibleBinding = tab.get("Name"); this.set(tabContainerVisibleBinding, false); }, this); }, //activate setActiveTab: function(activeTabName) { this.closeTabs(); this.set("ActiveTabName", activeTabName); this.set(activeTabName, true); },
Вы не удаляйте вкладку, а скрывайте ее:
init: function() { this.callParent(arguments); var scope = this; require(["jQuery"], function() { scope.hideTabs(); }); }, hideTabs: function() { $(document).bind("DOMNodeInserted", function(e) { if (e.target.id === "Нужный контейнер") { var tabs = Ext.getElementById("Нужный элемент"); var tab = Ext.get(tabs.children[1]); if (Условие при котором скрывать) { tab.setWidth(0); tab.hide(); } else { tab.setWidth("auto"); tab.show(); } } }.bind(this)); }
Через DOM работать не получится, т.к. содержимое вкладок подгружается только после нажатия на вкладку... я попробовал работать по схеме описанной в этой теме но видимо есть нюансы работы. Подскажите, если ли возможно ли назначить активную вкладку из кода используюя tabscollection?
Попробуй так активировать вкладку
var activeTabName = "GeneralMacrosTab"; this.set("ActiveTabName", activeTabName); this.set(activeTabName, true);
В твоем случае возможно лучше делать так...
//hide closeTabs: function() { var tabsCollection = this.get("TabsCollection"); tabsCollection.eachKey(function(tabName, tab) { var tabContainerVisibleBinding = tab.get("Name"); this.set(tabContainerVisibleBinding, false); }, this); }, //activate setActiveTab: function(activeTabName) { this.closeTabs(); this.set("ActiveTabName", activeTabName); this.set(activeTabName, true); },
Литвинко Павел,
Спасибо! Подкорректировал Ваш код и свой и вышло то что нужно)