2

在我的 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
4

4 回答 4

3

SAPUI5 ODataModel 前段时间发生了变化,现在您必须使用 ODataModel 的绝对路径,例如“/myDataSet”而不是“myDataset”,因为您一直在显示。我认为这可能是您的问题的根源,以及为什么您的呼叫在显示进度指示器之前出错。

正如@Qualiture 强调的那样,OData 调用默认是异步的,您不需要更改任何参数。有趣的是,您使用的是 1.19.1 版本,而我们其他人可用的 OpenUI5 快照目前是 1.16.8,无论版本如何,它都应该向后兼容,因此您不需要更改。应该!!

为什么添加了。我的猜测,大多数时候您会想要使用异步调用,这就是为什么它是默认设置,在某些用例中您可能想要使用 POST 进行同步调用,例如调用实体函数或发送更新 onBeforeUnload,使您无法等待回调,在这些情况下,我选择将调用包装在具有布尔异步参数的 BATCH 操作中,如果它在 Create Method 上可用,那将很容易。

添加了一些你可能不知道的东西,你可以考虑使用 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();
});

有关示例,请参阅JSBIN:带有 Stackoverflow 数据的RowRepeater

于 2014-02-19T04:29:46.463 回答
1

ODataModel .read(sPath, oContext?, oUrlParams?, bAsync? , fnSuccess?, fnError?)方法就足够了吗?

与 .create() 方法相反,它执行 GET 请求而不是 POST,但它允许异步请求(默认为异步)

于 2014-02-17T14:23:42.030 回答
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,并且急于完成他的任务,它只能是一种选择。

于 2014-02-18T15:02:09.963 回答
0

异步创建,请使用 Batch而不是 create():

createBatchOperation    
addBatchChangeOperations
submitBatch

文档:sap.ui.model.odata.ODataModel

于 2015-03-11T15:51:19.747 回答