Требуется изменить логику работы панели разделов.
Всем доброго времени суток.
Есть класс SideBar и я создал модуль NrbSideBarWithCountersModule который наследуется от него.
define("NrbSideBarWithCountersModule", ["terrasoft", "ext-base"], function() { Ext.define("Terrasoft.controls.NrbSideBarWithCountersModule", { extend: "Terrasoft.SideBar", alternateClassName: "Terrasoft.NrbSideBarWithCountersModule", Ext: null, sandbox: null, Terrasoft: null, itemTplMap: [ "caption", "imageUrl", "href", "domAttributes", "availableEntities" ], itemTpl: [ "<tpl if=\"visible != false\">", "<li data-item-index=\"{itemIndex}\"", "<tpl if=\"isSelected == true\">", "class=\"ts-sidebar-selected-item\"", "</tpl>", ">", "<span class=\"vertical-strip\"></span>", "<tpl if=\"href\"><a target=\"_self\" class=\"sidebar-item-link\" href=\"{href}\"></tpl>", "<div id=\"sidebar-item-wrapper-{itemIndex}\" class=\"ts-sidebar-item-wrapper\">", "<div id=\"sidebar-item-image-{itemIndex}\" class=\"ts-sidebar-item-image\" data-item-marker=\"{caption}\" " + "style=\"background-image:url({imageUrl})\" <tpl foreach=\"domAttributes\">{$}=\"{.}\"</tpl>></div>", "<div id=\"sidebar-item-text-{itemIndex}\" class=\"ts-sidebar-item-text\"> {caption} ", "<div id=\"sidebar-item-counter-{itemIndex}\" class=\"ts-sidebar-item-counter\"> {availableEntities} ", "</div>", "</div>", "<tpl if=\"href\"></a></tpl>", "</li>", "</tpl>" ], }); return Terrasoft.NrbSideBarWithCountersModule; });
В нём я добавил поле которое должно будет передаваться из модуля SectionMenuModule, также я создал новый модуль NrbSectionMenuModule в котором переопределил нужные методы.
define("NrbSectionMenuModule", ["ServiceHelper", "NrbSectionMenuModuleResources", "ModuleUtils", "MaskHelper", "LeftPanelUtilitiesV2", "CheckModuleDestroyMixin"], function (resources, ModuleUtils, ServiceHelper, MaskHelper, LeftPanelUtilities) { Ext.define("Terrasoft.configuration.NrbSectionMenuModule", { alternateClassName: "Terrasoft.NrbSectionMenuModule", override: "Terrasoft.SectionMenuModule", render: function (renderTo) { if (!Ext.isEmpty(viewModel) && !Ext.isEmpty(sideBar)) { sideBar.destroy(); } sideBar = Ext.create("Terrasoft.NrbSideBarWithCountersModule", Terrasoft.deepClone(sideBarConfig)); sideBar.bind(viewModel); sideBar.render(renderTo); MaskHelper.HideBodyMask(); }, getSideBarItems: function () { var config = []; var moduleStructure = Terrasoft.configuration.ModuleStructure; var modules = info && info.modules ? info.modules : Object.keys(moduleStructure); if (!modules) { return; } var availableSections = info.AvailableSections; var defaultIconUrl = Terrasoft.ImageUrlBuilder.getUrl(resources.localizableImages.DefaultIconSvg); modules.forEach(function (module) { if (module.moduleId !== Terrasoft.GUID_EMPTY) { var moduleName = module.moduleName ? module.moduleName : module; var moduleConfig = moduleStructure[moduleName]; if (moduleConfig.hide !== "true") { if (!Ext.isArray(availableSections) || availableSections.indexOf(moduleName) >= 0) { var caption = moduleStructure[moduleName].moduleCaption; var tag = ModuleUtils.getModuleTag(moduleName); var imageId = moduleStructure[moduleName].imageId; var imageUrl = imageId ? getImageUrl(imageId) : defaultIconUrl; var itemUrl = Terrasoft.workspaceBaseUrl + "/Nui/ViewModule.aspx#" + tag; var count = this.getCountOfAvailableProjects(); var itemConfig = { caption: caption, tag: tag, imageUrl: imageUrl, href: itemUrl, domAttributes: { "module-name": module.moduleName }, availableEntities: count }; if (!Terrasoft.Features.getIsEnabled("SectionMenuLink")) { itemConfig.href = null; } config.push(itemConfig); } } } }); return config; }, getCountOfAvailableProjects: function () { var requestConfig = { serviceName: "NrbProjectCounterService", methodName: "GetNumberOfAvailableProjects", callback: this.showResult }; this.callService(requestConfig, this); }, showResult: function (result) { console.log(result); }, }); return Terrasoft.NrbSectionMenuModule; });
Переопределение не даёт нужного результата и возник такой вопрос. Правильно ли тут использовать переопределение или лучше использовать наследование?
И как я понял мне надо будет переопределить все модули которые взаимодействовали с SectionMenuModule и поменять на NrbSectionMenuModule?
Нравится
Модули не замещаются как карточки. То что создали свой модуль NrbSideBarWithCountersModule это ваш модуль. А левую панель так и продолжает выводить SectionMenuModule.
Динар, для того, чтобы Ваш класс заменил стандартный, нужно в нём указать override и название того, что он замещает. А затем упомянуть название Вашего модуля в замещённом BootstrapModulesV2, который загружается при старте. Более подробно о таком подходе см. пример в этой теме.