0

我希望根据某些过滤条件在 Fiori 应用程序的详细信息页面中隐藏批准/拒绝按钮。过滤器通过视图/控制器扩展添加到主列表视图(左侧视图)中。现在,如果用户选择某种类型的过滤器(比如说,过去的订单)——那么“订单详情”页面中不应显示批准/拒绝按钮。这就是我在标题/详细信息视图中定义按钮的方式

 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)
                   },

但是在运行时,这些按钮没有分配我提到的 ID,而是使用 __button0 和 __button1 的 ID 创建的。

有没有办法从主列表视图中隐藏这些按钮?

谢谢你。

4

3 回答 3

2

推荐: SAP Fiori 设计原则只讨论禁用页脚按钮而不是更改Button. 在此处阅读有关指南的更多信息

根据过滤条件,您可以像这样禁用:

this.setBtnEnabled("btn_approve", false);

再次启用:this.setBtnEnabled("btn_approve", true);

同样,您可以使用更改按钮文本this.setBtnText("btn_approve", "buttonText");

其他方式:正如@TobiasOetzel所说,使用

this.setHeaderFooterOptions(yourModifiedHeaderFooterOptions);
于 2015-05-10T16:15:53.440 回答
1

您可以在控制器上多次调用 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 您可以影响显示的按钮。

于 2014-10-06T14:28:22.660 回答
-1

首先,您应该在定义 HeaderFooterOptions 时sId改为使用,您可以通过 获取页脚按钮,例如 Approve 按钮。idsId

this._oControlStore.oButtonListHelper.mButtons["btn_approve"]

请检查以下代码片段:

S2.view.controller:您定义了一个过滤器事件处理程序,并使用EventBus将事件发布OrderTypeChangedS3.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.controllerOrderTypeChanged :从订阅事件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") 
    }
}
于 2014-10-08T08:29:08.367 回答