2017-08-10 56 views
0

我想調用onBeforeRendering方法之前在我的onInit方法中加載模型。 attachRequestCompleted的問題是在渲染後某個時候調用。 例如,我得到這個錯誤枝條的ProcessFlow:sapui5塊視圖渲染,直到模型加載

Render must not be called within Before or After Rendering Phase. Call ignored. - [object Object] 

所以我的問題是:給它擋住了視線,直到模型IST裝載功能?

我實例化了我的視圖over一個manifes.json和我的模型在Component.js中。所以顯示的代碼是有點困難,但我加載我的模型是這樣的:

var oModel = new JSONModel().attachRequestCompleted(function(){...}); 
var oConfigModel = new JSON().attachRequestCompleted(function(){ 
     oModel.loadData(oConfigModel.getURL()); 
}); 
oConfigModel.loadData("config.json"); 

我這樣做是因爲我在格式化,並提出一些型號在我的主要模式的依賴。 目前我把數據放在xml中的數據綁定上的ProcessFlow上。

+0

您可以讓模型請求同步嗎? –

+0

請給我們展示一些代碼(在問題中)你如何引導,特別是如何定義和實例化視圖和控制器。 – boghyon

+0

我已編輯該問題。 – TheRadianer

回答

0

此處的選項可能是使用繁忙指示符。

init功能啓動指標:

sap.ui.core.BusyIndicator.show(); 

...在你的attachRequestCompleted回調函數停止指標:

sap.ui.core.BusyIndicator.hide(); 

更多信息here

+0

我使用BusyIndi​​cator嘗試它,但它不起作用。 – TheRadianer

0

封鎖UI永遠不是一個好主意! ESP。按照評論中的建議做同步請求是非常有用的。 Syncronous請求在主要瀏覽器的主線程中甚至不推薦使用。

,直到你的模型數據加載這樣你可以設置你的看法繁忙甚至看不見:

onInit: function() { 
    var oView = this.getView(); 
    oView.setBusy(true); 
    // option 2 set invisible: oView.setVisible(false); 

    ... insert model init here ... 
    var oModel = ... 
    oModel.attachEventOnce("requestCompleted", function() { 
    oView.setBusy(false); 
    // option 2 set visible: oView.setVisible(true); 
    }); 
} 

注意使用attachEventOnce代替attachRequestCompleted將只執行 - 你猜怎麼着 - 一次。

順便說一句:爲什麼阻止或根本不顯示UI非常重要?對於已經看到某事的用戶來說,這是一個更好的體驗。儘管最初視圖可能是空的。

BR Chris