Скрыть кнопки "Подтвердить / Отклонить" на главной странице Fiori
Я хочу скрыть кнопки "Подтвердить / Отклонить" на странице сведений о приложении Fiori на основе определенных условий фильтрации. Фильтры добавляются в представление Master List (вид слева) через расширение вида / контроллера. Теперь, если пользователь выбирает определенный тип фильтра (допустим, прошлые заказы), тогда кнопка подтверждения / отклонения не должна отображаться на странице сведений о заказе. Вот как я определил кнопки в представлении "Заголовок / Детали"
this.oHeaderFooterOptions = {
oPositiveAction: {
sI18nBtnTxt: that.resourceBundle.getText("XBUT_APPROVE"),
id :"btn_approve",
onBtnPressed: jQuery.proxy(that.handleApprove, that)
},
oNegativeAction: {
sI18nBtnTxt: that.resourceBundle.getText("XBUT_REJECT"),
id :"btn_reject",
onBtnPressed: jQuery.proxy(that.handleReject, that)
},
Однако во время выполнения этим кнопкам не присваиваются идентификаторы, которые я упомянул, вместо этого они создаются с идентификаторами __button0 и __button1.
Есть ли способ скрыть эти кнопки в режиме просмотра основного списка?
Спасибо.
3 ответа
Рекомендуется: принципы проектирования SAP Fiori говорят только об отключении кнопок нижнего колонтитула вместо изменения видимости Button
, Узнайте больше здесь о Руководящих принципах
Основываясь на условиях фильтра, вы можете отключить следующим образом:
this.setBtnEnabled("btn_approve", false);
чтобы снова включить: this.setBtnEnabled("btn_approve", true);
Точно так же вы можете изменить текст кнопки, используя this.setBtnText("btn_approve", "buttonText");
Другой способ: как сказал TobiasOetzel, используйте
this.setHeaderFooterOptions(yourModifiedHeaderFooterOptions);
Вы можете вызывать setHeaderFooterOptions на вашем контроллере несколько раз, например:
//Code inside of the controller
_myHeaderFooterOptions = {
oPositiveAction: {
sI18nBtnTxt: that.resourceBundle.getText("XBUT_APPROVE"),
id :"btn_approve",
onBtnPressed: jQuery.proxy(that.handleApprove, that)
},
oNegativeAction: {
sI18nBtnTxt: that.resourceBundle.getText("XBUT_REJECT"),
id :"btn_reject",
onBtnPressed: jQuery.proxy(that.handleReject, that)
}
},
//set the initial options
onInit: function () {
this.setHeaderFooterOptions(this._myHeaderFooterOptions);
},
//modify the options in an event
onFilter : function () {
//remove the negative action to hide it
this._myHeaderFooterOptions.oNegativeAction = undefined;
this.setHeaderFooterOptions(this._myHeaderFooterOptions);
},
//further code
поэтому, манипулируя _myHeaderFooterOptions, вы можете влиять на отображаемые кнопки.
Во-первых, вы должны использовать sId
вместо id
при определении HeaderFooterOptions вы можете получить кнопки нижнего колонтитула sId
Например, кнопка "Подтвердить".
this._oControlStore.oButtonListHelper.mButtons["btn_approve"]
Пожалуйста, проверьте следующий фрагмент кода:
S2.view.controller: у вас есть обработчик события фильтра, определенный ниже, и вы используете EventBus для публикации события OrderTypeChanged
в S3.view.controller
,
onFilterChanged: function(oEvent) {
// Set the filter value, here i use hard code
var sFilter = "Past Orders";
sap.ui.getCore().getEventBus().publish("app", "OrderTypeChanged", {
filter: sFilter
});
}
S3.view.controller: Подписаться на событие OrderTypeChanged
от S2.view.controller
,
onInit: function() {
///
var bus = sap.ui.getCore().getEventBus();
bus.subscribe("app", "OrderTypeChanged", this.handleOrderTypeChanged, this);
},
getHeaderFooterOptions: function() {
var oOptions = {
oPositiveAction: {
sI18nBtnTxt: that.resourceBundle.getText("XBUT_APPROVE"),
sId: "btn_approve",
onBtnPressed: jQuery.proxy(that.handleApprove, that)
},
oNegativeAction: {
sI18nBtnTxt: that.resourceBundle.getText("XBUT_REJECT"),
sId: "btn_reject",
onBtnPressed: jQuery.proxy(that.handleReject, that)
}
};
return oOptions;
},
handleOrderTypeChanged: function(channelId, eventId, data) {
if (data && data.filter) {
var sFilter = data.filter;
if (sFilter == "Past Orders") {
this._oControlStore.oButtonListHelper.mButtons["btn_approve"].setVisible(false);
}
//set Approve/Reject button visible/invisible based on other values
//else if(sFilter == "Other Filter")
}
}