簡體   English   中英

使用敲除-amd-helper插件和pub-sub進行敲除-發布發生在訂閱它的模塊加載之前

[英]Knockout using knockout-amd-helper plugin and pub-sub - publish happens before module that subscribe it has loaded

首先,我是基因敲除的新手,我已經開始使用基因敲除的輔助工具開發應用程序,並且我們正在使用require.js加載模塊。 我面臨發布訂閱的以下問題:

我的主頁有兩個部分,導航和mainContainer,都作為模塊(外部html模板和js文件)加載,並且我將模塊的名稱設置為可觀察,以便可以動態替換。 在mainContainer中,有一棵樹,如果用戶單擊樹的任何節點,則應該發生兩件事。 1.整個mainContainer模塊需要替換為同一div標簽中稱為“ detail”的其他模塊。 2.基於用戶在mainContainer中單擊的樹中的節點,我需要將值作為參數傳遞給此“詳細信息”模塊。

我想我可以實現1.通過將模塊名稱設置為可觀察的名稱,以及2.通過在mainContainer中將節點值發布到特定主題上,並在detail模塊中我需要訂閱該主題並使用'data傳遞給模塊'屬性。

因此,在樹的節點的onclick事件中,我正在發布節點值,並在可觀察對象中更改模塊名稱值,這成功地將mainContainer替換為detail模塊。 但是,在詳細信息模塊中,即使我訂閱了已發布的主題,也無法獲得該值,因為此訂閱發生在詳細信息模塊中,並且當用戶單擊節點並單擊並加載了詳細信息模塊時,因此,在mainContainer中已經進行了發布之后。 因此,我正在訂閱一個已經發布的主題,因此將無法獲得過去的發布價值。

我可以通過在根模塊(詳細信息模塊的父級)上調用訂閱來臨時解決,但在我看來這是一個骯臟的解決方案,理想情況下,我希望將此邏輯保留在詳細信息模塊本身中。

這更多是一個設計問題,所以我沒有發布代碼,但是我想知道是否有人可以評論我是否應該以不同的方式來解決這個問題,或者是否有技術上的解決方案。

謝謝

您可以考慮將額外的信息作為初始化數據傳遞到“詳細信息”模塊。

如果您的模塊返回一個函數(構造函數),則該值將傳遞給函數本身。 如果您的模塊返回一個對象,那么它將被傳遞給initialize函數。

因此,您不僅可以綁定一個可觀察模塊名稱,還可以綁定一個包含模塊綁定配置對象的可觀察對象。

您將像這樣填充它:

this.currentModule({
     name: "details",
     data: someData
});

綁定類似:

<div data-bind="module: currentModule"></div>

這是一個示例: http : //jsfiddle.net/rniemeyer/ctx083w3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM