当我使用模型(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"
});
}
答案 0 :(得分:1)
我也经历过与FeedListItem的iconPress相关联的事件触发两次虽然用户只点击一次的相同问题。
以下是您可以使用自定义编码实现的解决方法。
在视图控制器的onInit()
中声明以下变量this._bFirstTrigger = true;//SETTING FOR THE FIRIST TIME
在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;
}
此致
法赫德哈姆萨