2013-05-13 60 views
2

有誰知道在另一個視圖模型中獲取視圖模型實例的最簡單方法是什麼?更具體地說,我想將一個視圖模型的實例加載到另一個視圖模型中,以便後者可以調用前者的方法。durandal.js viewmodel communication

durandal是否保留在構圖過程中使用的所有視圖模型的列表?

我想一個辦法就是應用杜蘭道支持的pub/sub模式。 另一種方法可能是藉助knockout和dataFor實用程序功能手動獲取視圖模型。 但是,我想知道是否有方法顯式獲取組合視圖模型的實例。

注:我的模塊只需使用RequireJS中像對待另一個模塊/視圖模型視圖模型帶來暴露出的構造,而這個單對象

+0

有沒有第一個viewmodel沒有構建第二個viewmodel本身的原因? – Tyrsius 2013-05-13 16:23:50

+0

@Tyrsius這是我最終使用的解決方案。我只是想知道杜蘭達是否提供這樣的設施,但在快速查看源代碼後,我認爲沒有類似的功能。 我可能錯了 – ppoliani 2013-05-14 11:37:37

+1

如果你真的需要這種緊密耦合,@Tyrsius提到的解決方案可能是最好的方法。這樣的耦合是明顯的和有意的。 – 2013-05-14 13:36:06

回答

2

你可以做到這一點。但是,您真的想避免這種視圖模型通信,並改爲使用events

viewmodel將通過事件聚合器發佈事件,然後另一個viewmodel正在訂閱該事件。

查看「使用應用程序範圍消息」部分here

+0

如果模塊公開構造函數,那麼RequireJS不能用於獲取實例,因爲您只需要構造函數。否則,我同意 - 事件通常是更好的方法。 – 2013-05-14 13:33:54

+0

我沒有注意到這一點。那我肯定會和事件一起去! – 2013-05-14 13:39:39

+0

@JosephGabriel:用'new'和那個構造函數實例化一個對象有什麼不對?還要注意事件驅動的設計並不總是合適的;在不考慮應用程序特定需求的情況下規定其用途並不太明智。 – tne 2013-11-18 14:42:03