SAPUI5 - Model.Remove生成两个请求

时间:2018-03-21 17:20:33

标签: javascript xml odata sapui5 sap

当我使用模型(sap.ui.model.odata.v2.ODataModel)执行DELETE时,我正面临着使用SAPUI5编码的奇怪行为。我想实现一个列表,其中显示了一些"收藏夹"在SelectDialog中。通过按下图标,用户可以删除收藏夹。对于项目本身,我使用了FeedListItem,它触发了iconPress-Event _handleIconPressDelete。

<FeedListItem icon="sap-icon://delete" iconActive="true" iconPress="_handleIconPressDelete" text="{Name}" sender="{ID}"/>

事件如下所示:

    _handleIconPressDelete: function(oEvent) {
        var oModel = oEvent.getSource().getModel();

        oModel.remove(oEvent.getSource().getBindingContext().getPath(), {
            success: function(data) {
                // success handling
            },
            error: function(e) {
                // error handling
            }
        });
    }

但是当触发此事件时,会生成两个相同的删除请求并导致错误,因为在后端使用当前的变更集编码,我只能同时执行一个请求。

奇怪的是,这种行为只有在我打开第一个对话框时才会出现。当我关闭并重新打开它时,一切正常。

你有什么想法,我在这里做错了什么,以便生成两个请求?我还检查过,如果事件被多次触发,但事实并非如此。

作为当前的解决方法,我正在使用deferredGroups,如下面的snipped所示,这两个请求是分开的,但我认为必须有更好的方法来解决这个问题。

_handleIconPressDelete: function(oEvent) {
        var oModel = oEvent.getSource().getModel();

        oModel.setDeferredGroups(["group1"]);

        oModel.remove(oEvent.getSource().getBindingContext().getPath(), {
            groupId: "group1",
            success: function(data) {
                // success handling
            },
            error: function(e) {
                // error handling
            }
        });

        oModel.submitChanges({
            groupId: "group1"
        });
    }

1 个答案:

答案 0 :(得分:1)

我也经历过与FeedListItem的iconPress相关联的事件触发两次虽然用户只点击一次的相同问题。

以下是您可以使用自定义编码实现的解决方法。

  1. 在视图控制器的onInit()

    中声明以下变量
    this._bFirstTrigger = true;//SETTING FOR THE FIRIST TIME
    
  2. 在FeedListItem的iconPress事件中使用它,以确保相关代码只执行一次,如下所示:

    _handleIconPressDelete: function(oEvent) {
    if (this._bFirstTrigger) {
    var oModel = oEvent.getSource().getModel();oModel.setDeferredGroups(["group1"]);
    
    oModel.remove(oEvent.getSource().getBindingContext().getPath(), {
        groupId: "group1",
        success: function(data) {
            // success handling
        },
        error: function(e) {
            // error handling
        }
    });
    
    oModel.submitChanges({
        groupId: "group1"
    });
    }
    this._bFirstTrigger = false;
    }
    else{
     this._bFirstTrigger = true;
    }
    
  3. 此致

    法赫德哈姆萨