setBusy没有执行

时间:2016-05-20 15:39:07

标签: sap sapui5

我已将setBusy在我的应用程序中的其他位置执行,但为什么不在这里......

这是在我的网站详细信息中阅读,因此如果没有setbusy,页面看起来就像什么都不做。

_onRouteMatched: function (oEvent) {
//initialise display
var view = this.getView();
view.setBusy(true);

view.byId("shopInput").setValue("");
view.byId("effectiveDateFrom").setValue("");
view.byId("shop24Hrs").setSelected(false);
view.byId("shopClosed").setSelected(false);
view.byId("createNext").setVisible(false);
view.byId("createSubmit").setVisible(false);
//view.byId("createSave").setVisible(false);

// initialise the store view model
var oModel = this.getModel("site");

this.getModel().read("/SiteSet", {
success: function (oData) {
var oSiteData = oModel.getData();
oSiteData.Sites = oData.results;
oModel.setData(oSiteData);
}.bind(this)
});
view.setBusy(false);

},

任何想法?

2 个答案:

答案 0 :(得分:1)

实际上您的代码设置繁忙但会立即重置。 read方法是异步的。您必须在成功回调函数内重置繁忙(在错误回调中重置它也是一个好主意)。

_onRouteMatched: function (oEvent) {
//initialise display
var view = this.getView();
view.setBusy(true);

view.byId("shopInput").setValue("");
view.byId("effectiveDateFrom").setValue("");
view.byId("shop24Hrs").setSelected(false);
view.byId("shopClosed").setSelected(false);
view.byId("createNext").setVisible(false);
view.byId("createSubmit").setVisible(false);
//view.byId("createSave").setVisible(false);

// initialise the store view model
var oModel = this.getModel("site");

this.getModel().read("/SiteSet", {
  success: function (oData) {
    var oSiteData = oModel.getData();
    oSiteData.Sites = oData.results;
    oModel.setData(oSiteData);
    view.setBusy(false);
  }.bind(this),
  error: function(){
    view.setBusy(false);
  }
});

},

通常在使用setBusy()时,您应该注意以下几点:

  • 默认情况下,繁忙指示符在setBusy(true)后1000毫秒显示。有一个setBusyIndicatorDelay()函数来控制延迟(可以设置为0)。
  • 忙碌指标始终是延迟创建的(使用setTimeout())。 JavaScript是单线程的。因此,如果调用setBusy()后的代码阻塞,则在代码完成并且控制流返回到事件循环之前,不会显示繁忙指示符。所以不要试试这个:setBusy(true); model.loadData("/data", false /*synchronous*/); setBusy(false);

答案 1 :(得分:0)

您可以创建一个繁忙的对话框对象,然后分别在成功回调和错误回调中使用打开和关闭功能。请看一下代码: -

_onRouteMatched: function (oEvent) {
//initialise display
var busyDialog= new sap.m.BusyDialog;
view.byId("shopInput").setValue("");
view.byId("effectiveDateFrom").setValue("");
view.byId("shop24Hrs").setSelected(false);
view.byId("shopClosed").setSelected(false);
view.byId("createNext").setVisible(false);
view.byId("createSubmit").setVisible(false);
//view.byId("createSave").setVisible(false);

// initialise the store view model
var oModel = this.getModel("site");
busyDialog.open();
this.getModel().read("/SiteSet", {
success: function (oData) {
busyDialog.close();    
var oSiteData = oModel.getData();

oSiteData.Sites = oData.results;
oModel.setData(oSiteData);
}.bind(this)
});
busyDialog.close();

},