在我的SAPUI5应用程序中,我有一个由进度指示器制作的动画,它应该在等待OData模型.create()
服务的响应时运行(因为它需要一段时间才能将响应返回给UI) 。
问题是动画在.create()
请求发送后停止。
有谁知道如何制作异步.create()
OData请求?
我的代码如下所示:
oODModel = new sap.ui.model.odata.ODataModel(myUrl);
oEntry = myNewDataEntry;
myAnimationIndicator.start(); //animation starts to run
var onSuccess = function(){myAnimationIndicator.stop();};
var onError = function(){myAnimationIndicator.stop();};
oODModel.create('myDataSet',oEntry, null, onSuccess, onError); //From here the animation stops
答案 0 :(得分:3)
SAPUI5 ODataModel已经改变了一段时间,现在你必须使用ODataModel的绝对路径,例如'/ myDataSet'而不是'myDataset',因为你一直在显示。我认为这可能是您的问题的根源以及为什么在显示进度指示器之前您的调用是错误的。
由于@Qualiture突出显示OData调用默认为异步,因此您无需更改任何参数。有趣的是你在版本1.19.1和我们其他人可用的OpenUI5快照目前是1.16.8,无论版本应该向后兼容,所以你不需要改变。应该是!!
为什么要添加它。我的猜测,大多数时候你会想要使用异步调用,这就是为什么它是默认设置,有一些用例你可能希望用POST进行同步调用,例如调用实体函数,或发送更新onBeforeUnload,你不能等待回调,在这些情况下,我选择在具有布尔异步参数的BATCH操作中包装调用,如果它在Create Method上可用,则会很容易。 / p>
你可能还不知道还有一些你可能不知道的东西,你可以考虑使用oDModel.createEntry(sPath,property)和oDModel.submitChanges(...)而不是oDModel.create(...)这是一个相对的新功能,它在发送之前根据实体元数据验证您的数据,并为您创建可绑定的上下文。
此外,您可能希望使用模型事件来控制进度动画,因为您可以为所有操作设置一次,而不是依赖于单个回调
oDModel.attachRequestSent(function (oEvent) {
myAnimationIndicator.stop();
});
oDModel.attachRequestCompleted(function (oEvent) {
myAnimationIndicator.stop();
});
oDModel.attachRequestFailed(function (oEvent) {
myAnimationIndicator.stop();
});
答案 1 :(得分:1)
ODataModel .read(sPath,oContext?,oUrlParams?, bAsync?,fnSuccess?,fnError?)方法是否足够?
与.create()方法相反,它执行GET请求而不是POST,但它允许异步请求(默认为异步)
答案 2 :(得分:0)
不,.read()无法完成我想要的工作。我需要在后端进行更改。
顺便说一下,这是我从别人那里得到的一些信息,我想分享一下:
解决方案1:我使用的是SAPUI5 1.14.6,我刚收到有关sapui5 1.19.1的信息,新的.create()API是:
oODModel.create('myDataSet',oEntry,null,onSuccess,onError,bAsyn);
显然,最后一个参数提供了我正在寻找的可能性。
解决方案2:可以自己覆盖方法,如:
sap.ui.model.odata.ODataModel.prototype.create = function(sPath,oData,oContext,fnSuccess,fnError,bAsync){...}
然而。它需要一些额外的编码,而且不易维护。如果框架能够完成工作,那么这不是一个好的解决方案它只能是一个选项,如果一个人无法获得正确版本的sapui5,并且急于完成他的任务。
答案 3 :(得分:0)
在异步中创建使用批处理而不是create():
createBatchOperation
addBatchChangeOperations
submitBatch