Мне нужно получить состояние состояния кнопки переключения, помещенного в заголовок в 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");
}
});
});
заранее спасибо
Есть несколько способов, чтобы достичь того, что вы пытаетесь сделать, но я бы посоветовал против обоих из них:
Вот несколько ссылок, чтобы получить всю необходимую вам информацию:
Почему совет против обоих из них:
Оба они легко могут быть реализованы с помощью комедийной линии браузера! Любой может заглянуть в ваши контроллеры, посмотреть свое имя модели или получить параметр для администраторов.
Единственный сценарий, в котором вы могли бы это сделать, - это создать какой-то механик 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")