/****************************************************************** * * 通用菜单多页切换复合窗体 * ******************************************************************/ const BridgeWindow = require( "bridge.window" ); const { MENUS } = require( "bridge.panels" ); cc.Class( { extends: BridgeWindow, properties: { cfgKey: { default: "", displayName: "配置键" }, defPage: { default: "", displayName: "默认页" }, menu: { default: null, type: cc.Node }, pages: { default: null, type: cc.Node }, }, // 载入 onLoad: function() { // 菜单初始化 this.menu.children.forEach( _item => { nx.gui.setActive( _item, "on", false ); nx.gui.setActive( _item, "off", true ); } ); }, // 重载:参数打开 onOpenConfigs: function( _params ) { // 配置获取 this.cfgs = MENUS[ this.cfgKey ]; if( nx.dt.objEmpty( this.cfgs ) ) { nx.error( "$MenuWnd:配置缺失! ", this.cfgKey ); this.delayClose(); return; } // 起始页 let pname = _params.page || _params.p1 || _params.fromOther || this.defPage; if( nx.dt.strEmpty( pname ) ) { for( let name in this.cfgs ) { pname = name; break; } } // 切换菜单 this.togMenu( pname ); }, // 重载:关闭前 onPreClosed: function() { this.pages.children.forEach( _page => { let cmp = _page.getComponent( "cmp.com.menu.page" ); if( cmp ) { cmp.onPreClosed(); } } ); }, // 切换菜单 togMenu: function( _key ) { // 忽略 if( nx.dt.strEmpty( _key ) || this.curKey == _key ) { return; } // 菜单项切换 this.menu.children.forEach( _item => { nx.gui.setActive( _item, "on", _item.name == _key ); nx.gui.setActive( _item, "off", _item.name != _key ); } ); // 页面切换 let page = nx.gui.find( this.pages, _key ); if( page ) { this.pages.children.forEach( _page => { nx.gui.setActive( _page, "", _page.name == _key ); } ); return; } // 页配置 let info = this.cfgs[_key]; if( nx.dt.objEmpty( info ) ) { nx.error( "$MenuWnd:无效配置页!", _key ); return; } // 需要加载 nx.res.loadPrefab( this.cfgs[_key].prefab, ( _err, _data ) => { if( _err ) { return; } let page = cc.instantiate( _data ); page.name = _key; page.parent = this.pages; // let cmp = node.getComponent( "act.page.base" ); // if( cmp ) { // cmp.build( _item.mdata ); // } this.pages.children.forEach( _page => { nx.gui.setActive( _page, "", _page.name == _key ); } ); }, true ); }, // 菜单切换 onTouchMenu: function( _key ) { this.togMenu( _key ); }, } );