2016-10-27 45 views
0

在視圖的onBeforeRendering()函數內,我應該如何確定模型中是否存在特定節點,如果不是,請修改模型以包含節點?這個問題是關於將數據延遲加載到模型中以便用戶不常訪問的數據,但如果加載了初始模型數據,則會導致性能損失。延遲加載標籤點擊數據的最佳做法

我的用例有一個列表頁面,該列表頁面指向使用單擊列表中的任何項目的詳細信息頁面。在詳細信息頁面上是一組選項卡,其中顯示與所選詳細信息相關的子詳細信息。具體來說,對任務的簡要描述很長。

選項卡控件通過manifest.json樣式路由引出以在標籤內容區域中顯示視圖。

這是我目前工作的代碼是視圖控制器的onBeforeRendering事件中:

onBeforeRendering: function(oEvent){ 

var sPath = this.getView().getBindingContext("Projects").getPath(); // something like /task/6 
console.log('Path='+sPath) 

var oModel = this.getView().getModel("Projects"); 
var oTask = oModel.getProperty(sPath + "/brief"); 
if (oTask) { // looks like /brief exists so must already have loaded the brief 
    // nothing to do 
    console.log('Use existing data') 
} 
else { // /brief not yet present so we need to load it up 
    console.log('Load new data') 
    oModel.setProperty(sPath + "/brief", "This is the brief...") // replace with loaddata() from server, use attachRequestCompleted to call function to modify model. 
}} 

的問題 - 這是正確的做法?

編輯:基於在this question的討論,我修改了我的代碼,使用一個事件,每次顯示視圖時觸發。 onBeforeRendering結果表明,運行時沒有太多明顯的可預測性 - 我確信它有它,但無論如何我想要一個每個顯示事件。此外,我進一步豐富了代碼,但保留了基本結構,並且似乎按照我的意願去做。

回答

1

這是一種有效的方法。但是你應該認真考慮用例:如果你加載的數據在後端被修改了會發生什麼? JSONModel在這裏沒有給你任何支持,因爲它只能作爲啞數據存儲。

+0

謝謝。關於JSONModel是基於拉的,我同意。你能提出一個更好的方法來實現客戶端和服務器之間的同步嗎?我的使用案例不受您的觀點影響,但我承認其他人很快就會出現。那麼最佳做法是什麼?據我所知,流行的MVC庫主要支持JSON,所以這一定是一個常見問題。 –