我遵循教程,現在我試圖將這種學習擴展到一個真正的應用程序。在我的應用程序中,我使用了JSON模型。與教程不同,我的是一個真實世界的應用程序,當我加載數據模型時,我必須獲取用戶憑據以充當過濾器。在教程中,模型在component.js中加載。在我的應用程序中,我必須提示用戶輸入用戶名和密碼,以便在應用程序的第一個視圖中顯示一個登錄片段。這恰好是主視圖,嚴格來說,它在 component.js之後運行。驗證用戶之後,我通過Ajax從服務器收集JSON數據,並通過this.setData(my_json)將其置於默認模型中。爲什麼this.setModel()在上下文中的行爲不同
當測試從主視圖到詳細視圖的路由時,我產生了一個頑固的bug,因爲在詳細視圖中調用this.getModel()產生了一個空模型。嗯 - 我只是在主視圖中設置模型,並可以在表格控件中看到數據 - 給出了什麼?
我認爲是一個路由問題,但確認這不是問題 - 我可以控制檯登錄通過路由器的參數,無論如何細節視圖出現,所以路由是好的。
回顧:我在主頁面中使用this.setModel(),然後在詳細信息頁面中使用this.getModel(),但後者是一個空模型。
問題:我希望模型在應用程序中可用。這些教程着重於在component.js中設置模型,但我不能。例如,從主視圖或其他任何不是component.js的位置設置全局模型的正確語法是什麼。
我想我需要使用下面的主機(最後一行是顯著):
var oModel = new JSONModel(); // declare a JSON model
oModel.setData(<json string>); // load a JSON string fetched from serve etc.
sap.ui.getCore().setModel(oModel); // important - set as the core model
我覺得我的問題的根源是,在教程似乎車型在組件設置經由
this.setModel(oModel); // a line in component.js
因此,我認爲本在上下文component.js是應用全局而在一個視圖此涉及視圖沿,這是有意義的。我對嗎?
謝謝納比 - 非常清楚,我將書籤作爲可能需要在將來提及毫無疑問的東西。在我提出這個問題之前,我嘗試通過getOwnerComponent()。getModel()來獲取模型,並且我現在看到,如果我使用getOwnerComponent()將模型設置到組件中, .setModel()。這麼近,但迄今爲止。 –