从其他视图获取放置在app.view标题中的切换按钮的状态

时间:2018-10-19 11:25:53

标签: javascript sapui5

我需要从其他视图获取置于app.view中标题上的切换按钮的状态。在app.view上,我有页眉和页脚。切换按钮位于标题上。按下按钮可以在 admin / user 之间切换用户角色。在其他视图上,我有一些按钮,这些按钮可以在按用户角色时打开外部URL。我也想在每个视图上切换角色。如何实现呢?

App.view.xml

<mvc:View 
    height="100%"
    controllerName="sap.ui5.App" 
    xmlns:mvc="sap.ui.core.mvc"
    xmlns:core="sap.ui.core"
    xmlns:layout="sap.ui.layout"
    xmlns:tnt="sap.tnt"
    xmlns="sap.m"
    xmlns:u="sap.ui.unified">
        <Page 
            id="masterPage" 
            title=""
            showHeader="false"
            enableScrolling="false">
               <tnt:ToolHeader>
                <ToolbarSpacer />
                <core:Icon src="sap-icon://tree" class="headerIcon" size="1.2rem"/>
                <Text text="Title" wrapping="false" class="headerText">
                    <layoutData>
                        <OverflowToolbarLayoutData priority="Disappear" />
                    </layoutData>
                </Text>
            <ToolbarSpacer />
        <Button icon="sap-icon://home" type="Transparent" press="onHomePress">
                <layoutData>
                    <OverflowToolbarLayoutData priority="NeverOverflow" />
                </layoutData>
            </Button>
            <ToggleButton id="btnRoleSwitch"  icon="sap-icon://person-placeholder" enabled="true" pressed="false" press="onRoleSwitchPress" type="Transparent"/>
                <Label text=""/>
    </tnt:ToolHeader>
    <App id="rootControl" class="adjustedHeight"/>
        <footer>
            <Toolbar>
                <ToolbarSpacer/>
                    <Text text="Footer text" wrapping="false"></Text>
                <ToolbarSpacer/>
            </Toolbar>
        </footer>
    </Page>
</mvc:View>

<mvc:View 
    	height="100%"
    	controllerName="sap.ui5.App" 
    	xmlns:mvc="sap.ui.core.mvc"
    	xmlns:core="sap.ui.core"
    	xmlns:layout="sap.ui.layout"
    	xmlns:tnt="sap.tnt"
    	xmlns="sap.m"
    	xmlns:u="sap.ui.unified">
    		<Page 
    			id="masterPage" 
    			title=""
    			showHeader="false"
    			enableScrolling="false">
    			   <tnt:ToolHeader>
    				<ToolbarSpacer />
    				<core:Icon src="sap-icon://tree" class="headerIcon" size="1.2rem"/>
    				<Text text="Title" wrapping="false" class="headerText">
    					<layoutData>
    						<OverflowToolbarLayoutData priority="Disappear" />
    					</layoutData>
    				</Text>
    			<ToolbarSpacer />
    		<Button icon="sap-icon://home" type="Transparent" press="onHomePress">
    				<layoutData>
    					<OverflowToolbarLayoutData priority="NeverOverflow" />
    				</layoutData>
    			</Button>
    			<ToggleButton id="btnRoleSwitch"  icon="sap-icon://person-placeholder" enabled="true" pressed="false" press="onRoleSwitchPress" type="Transparent"/>
    				<Label text=""/>
    	</tnt:ToolHeader>
    	<App id="rootControl" class="adjustedHeight"/>
    		<footer>
    			<Toolbar>
    				<ToolbarSpacer/>
    					<Text text="Footer text" wrapping="false"></Text>
    				<ToolbarSpacer/>
    			</Toolbar>
    		</footer>
    	</Page>
    </mvc:View>

App.controller.js

return BaseController.extend("sap.ui5.App", {
    		onInit : function () {

    		},
    	
    		onDisplayNotFound: function(oEvent) {
    			// display the "notFound" target without changing the hash
    			this.getRouter().getTargets().display("notFound", {
    				fromTarget: "home"
    			});
    		},

    		onHomePress : function(oEvent) {
    			this.getOwnerComponent().getRouter().navTo("home");
    		},
    		
    		onRoleSwitchPress : function (oEvent) {
    			var modeInfoMessage;
    			var oBtnRoleSwitch = this.byId("btnRoleSwitch");
    			var btnState = oBtnRoleSwitch.getPressed();
    			var sRole = "";
    			
    			if 	(btnState == true) {
    				sRole = "Admin";
    				
    			}
    			else if (btnState == false) {
    				sRole = "User";
    			}
    			
    			MessageToast.show(sRole);
    		}
    	});

    }, true);

View1.controller.js

return BaseController.extend("sap.ui5.View1", {
    		onInit: function() {

    			
    		},
    		
    				
    		
    		onSelectionChange: function(oEvent) {
    			var oTileUrl = "";		
    			var oTileFunction = "";
    			var parentTitle = "";		
    			
    			//----> check state of toggle button on app.view <-------------


    		    if (userRole != "") {
    			    if (userRole == "admin") {
    			    	oTileUrl = oEvent.getSource().getBindingContext().getProperty("adminUrl");
    			    }
    			    else if (userRole == "user") {
    			    	oTileUrl = oEvent.getSource().getBindingContext().getProperty("userUrl");
    			    }
    		    }

    		    window.open(oTileUrl, "_blank");
    		    
    		}
    	});

    });

预先感谢

1 个答案:

答案 0 :(得分:0)

有多种方法可以实现您要完成的任务,但是我建议反对两者:

  • 模型
  • 导航中的参数

以下是一些链接,可获取您所需的所有信息:

我为什么要反对两个建议

通过浏览器的命令行,可以轻松地 操作它们两者! 任何人都可以查看您的控制器,查找您的型号名称或获取用于管理员的参数。
唯一可以执行此操作的方案是,一旦用户点击了这些管理员视图/页面,便创建了某种安全机制。
对于那些机械师,我的意思是:

 if (userRole != "")

在浏览器控制台中也可以很容易地对其进行操作。

================================================ =========

快速浏览模型(我偏爱的方式),如果您不愿意在树液站点上阅读

App.view.xml:

<ToggleButton id="btnRoleSwitch"  
    icon="sap-icon://person-placeholder" 
    enabled="true" 
    pressed="{urModel/>isPressed}" 
    press="onRoleSwitchPress" 
    type="Transparent"/>

component.js的onInit:

var oUrModel= new JSONModel({
            isPressed : null,
            .
            .
            .
        });
        this.setModel(oUrModel, "urModel");

view1控制器:

this.getView().getModel("urModel").getProperty("/isPressed")