2016-06-17 26 views
0

我有一個容器頁面Index.html(這可以被視爲一個母版頁),我在其中加載不同的頁面Home.html,people.html,每個頁面都有自己的viewmodel js文件(Home.js,people。 JS)。我從Home.html導航到People.html。在Home.js中,我進行Ajax調用,並在People.html頁面訪問People.js時需要它獲取的數據。我曾嘗試使用PublishOn和SubscribeTo但dint產生的結果,我試圖在main.js中創建一個變量,並想到在Home.js和people.js中使用它,我可以通過使用$ root來訪問它。但我只能在Html頁面中做到這一點,但不能在Js中做到這一點。 希望我清楚我的問題陳述。 **注意:**我也使用RequireJs進行配置。如何在整個應用程序中維護KnockoutJs中的全局變量?

請幫我解決這個問題。

+0

我不知道我是否正確理解你的問題。您有一些數據存儲在home.js viewmodel中,您需要在重定向之後從其他視圖模型訪問此數據?或者它實際上是一個單獨的頁面,並且您已經加載了兩個視圖模型,並且只需要訪問這些視圖模型? – Martin

+0

「在Home.js中,我做了一個Ajax調用,我需要它在People.js中獲取的數據...」 - 這就是你失去了我的地方。在我看來,你應該能夠向容器中添加一個變量(你沒有解釋main.js在哪裏使用)並從任一視圖模型中訪問它。也許你將它添加到或從錯誤的範圍訪問它? – awj

+0

@Martin:您有一些數據存儲在home.js viewmodel中,您需要在重定向後從其他viewmodel訪問此數據? 「是」。我不是一次加載這兩個頁面。 – yashwanth

回答

0

如果數據是真正的全局數據,一種方法是創建一個新的AMD/RequireJS模塊,然後在Home.htmlPeople.html的ViewModels中將其識別爲依賴項。然後讓這個共享模塊管理數據。我會試圖將Ajax調用從Home的ViewModel移動到這個新的共享模塊中。

使用$root會在您的視圖之間創建隱式合同。有人會說這很難維護,並且最好通過子視圖參數來記錄關係。如果數據不是全局的,但只在特定視圖的兩個子視圖之間共享,則可以通過參數將數據傳遞給子視圖。您正在使用Knockout組件還是Oracle JET模塊?兩者都允許您將父視圖的參數傳遞給子ViewModel。

+0

傳遞ViewModels的依賴項參數爲我完成了這項工作!謝謝 :-) – yashwanth

相關問題