Javascript SAPUI5-Model.Remove生成两个请求

Javascript SAPUI5-Model.Remove生成两个请求,javascript,xml,odata,sapui5,Javascript,Xml,Odata,Sapui5,当我对模型(sap.ui.model.odata.v2.ODataModel)执行删除操作时,我目前在SAPUI5编码方面面临一个奇怪的行为。我想实现一个列表,在SelectDialog中显示一些“收藏夹”。通过按下图标,用户可以删除收藏夹。对于项目本身,我使用了FeedListItem,它触发iconPress事件\u handleIconPressDelete <FeedListItem icon="sap-icon://delete" iconActive="true" iconPr

当我对模型(sap.ui.model.odata.v2.ODataModel)执行删除操作时,我目前在SAPUI5编码方面面临一个奇怪的行为。我想实现一个列表,在SelectDialog中显示一些“收藏夹”。通过按下图标,用户可以删除收藏夹。对于项目本身,我使用了FeedListItem,它触发iconPress事件\u handleIconPressDelete

<FeedListItem icon="sap-icon://delete" iconActive="true" iconPress="_handleIconPressDelete" text="{Name}" sender="{ID}"/>
但当触发此事件时,会生成两个相同的删除请求并导致错误,因为在后端使用当前变更集编码时,我只能同时执行一个请求

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

你有什么想法吗?我在这里可能会做错什么,从而生成两个请求?我还检查了事件是否多次触发,但事实并非如此

作为当前的解决方法,我正在使用如下截图所示的延迟组,以便将两个请求分开,但我认为必须有更好的方法来解决这个问题

_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"
        });
    }

我也遇到过同样的问题,与FeedListItem的iconPress关联的事件会触发两次,尽管用户只单击了一次

下面是一个可以使用自定义编码实现的变通方法

  • 在视图控制器的onInit()中声明以下变量

  • 在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;
    }
    
  • 问候,

    法哈德·哈姆萨(Fahad Hamsa)

    感谢您的解决方案!:)这肯定比发送两次请求要好。希望有一天这种行为会得到解决,或者至少有一个解释,为什么会发生这种情况。
    this._bFirstTrigger = true;//SETTING FOR THE FIRIST TIME
    
    _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;
    }