Получить состояние переключателя, помещенного в заголовок в app.view из других представлений

1

Мне нужно получить состояние состояния кнопки переключения, помещенного в заголовок в app.view из других представлений. На app.view у меня есть верхний и нижний колонтитулы. Кнопка Toggle - заголовок. Кнопка нажимает на пользователя роль пользователя между администратором/пользователем. На других представлениях у меня есть кнопки, которые при нажатии открывают внешний 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");
    		    
    		}
    	});

    });

заранее спасибо

Теги:
sapui5

1 ответ

0
Лучший ответ

Есть несколько способов, чтобы достичь того, что вы пытаетесь сделать, но я бы посоветовал против обоих из них:

  • модели
  • Параметр в вашей навигации

Вот несколько ссылок, чтобы получить всю необходимую вам информацию:

Почему совет против обоих из них:

Оба они легко могут быть реализованы с помощью комедийной линии браузера! Любой может заглянуть в ваши контроллеры, посмотреть свое имя модели или получить параметр для администраторов.
Единственный сценарий, в котором вы могли бы это сделать, - это создать какой-то механик secruity после того, как пользователь попадет в эти просмотры/страницы администратора.
И с этими средствами я не имею в виду что-то вроде:

 if (userRole != "")

Слишком легко управлять тоже можно в консоли браузера.

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

Быстрый взгляд на модели (мой предпочтительный способ), если вы ленитесь читать на сайте sap

App.view.xml:

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

onInit вашего component.js:

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

Контроллер view1:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню