2013-03-27 78 views
0

情景: - 需要被髮送到一個共同的功能,這又做了一些基本的驗證或顯示錯誤與檢查&未經檢查的項目數的JSON。由不同的css/js團隊處理不同的函數,這些函數根據通用函數結果(true/false)調用此函數&每個提供json檢查/取消選中狀態的團隊/模塊執行相關操作。因此,每個調用此函數的獨立團隊都會依賴共同函數的結果(比如getcount)&公共函數獨立操縱dom。 (比如getCount({「chk」:2,「unchk」:4}))我正在尋找更簡潔的pusblish/subcribe方法,因爲jquery &很容易傳達給全部只作爲主題名稱& contract/json需要描述(也就是說if/else子句更少)。由於常用函數是訂戶&當每個獨立函數發佈chk/unchek json結果時,通用函數可以很容易地使用發佈/訂閱方法進行操作,但獨立方法也必須執行計數器操作,只有訂閱函數可以發送結果。我知道JavaScript是異步的我也明白,通用的方法可以發佈(說「resultOfGetCount」)每個獨立的功能/模塊可以聽&做動作,但有沒有在任何方式在普通的JavaScript或jQuery中哪些用戶可以以類似於$ .ajax的方式向發佈者發送結果,其中在服務器調用完成後調用回調函數。JavaScript的發佈與訂閱回調

尋找這種情況的最佳方法。

回答

1

下面是jQuery的一個簡單的發佈訂閱模型從這個blog post

var exampleHandle = function(){ 
    //do stuff when topic is published 
    ... 
} 

function subscribe(topic,handle){ 
    $("#subscription").bind(topic,handle); 
} 

function publish(topic,params){ 
    $("#subscription").trigger(topic,params) 
} 

function unsubscribe(topic,handle){ 
    $("#subscription").unbind(topic,handle); 
} 

這裏可以用一個簡單的字符串作爲主題,以訂閱或退訂的話題,並附加手柄作爲一個回調函數。如果需要,該句柄也可用於稍後取消訂閱主題。

的方法是基於jQuery的觸發和綁定功能。這些 允許您監聽元素上的自定義事件,並手動觸發元素上的事件。這爲 提供了簡單訂閱模式的基本骨幹。

如果應用程序元素想要 訂閱主題,它們將處理程序綁定到「訂閱 元素」。這可以是頁面上的指定元素,或者僅僅是窗口元素 。您當然也可以爲不同的訂閱使用不同的元素。然後,當某個東西發佈到該主題時,處理函數將執行 。

對於發佈,功能可以通過 的話題和參數,發佈功能。這會調用jQuery的 觸發器來引發事件主題,傳遞參數。 這些參數被傳遞給句柄函數。

如果某個元素想要 取消其訂閱,他們可以將該主題傳遞給 並將其處理爲取消訂閱方法。請注意,句柄必須與最初用於訂閱的功能對象相同,而不是類似功能的副本或 。您還可以使用jQuery的解除綁定來取消所有 訂閱的主題,只需指定沒有 句柄函數的主題即可。

+0

讓說,我們使用綁定的回調/手柄功能doAfterGetCnt $( 「#訂閱」)。綁定( 「getCount將」,grp1.doAfterGetCnt())這裏GRP1是namespce&.doAfterGetCnt()是callbk FUNC,在這種情況下,我們只綁定到一個方法,但是subrcribr應該回調不同的函數,比如grp2.getCntAfter(),因爲您看到名稱空間和回調方法名稱都會更改,因爲它們屬於不同的團隊並遵循不同的約定。我想要更通用的方式來處理情況,在這種情況下,用戶應該能夠調用不同的方法和發佈者應該通過callbk func的名字也沒關係! – user593029 2013-03-27 16:37:59

+0

呵呵?我不確定我明白你在說什麼。如果你有更多的擔憂,爲什麼不編輯你的問題,幷包含一些代碼示例,我可以嘗試提供幫助。 – 2013-03-27 16:41:01

+0

我想我有一個想法,我猜$ .publish&$ .subscribe方法也可以,我們可以通過方法名稱和尋找動態函數回調可以做其餘的! – user593029 2013-03-27 16:41:58