0

场景:- 需要将带有已检查和未检查项目计数的 json 发送到一个通用函数,该函数又进行一些基本验证或显示错误。不同的 css/js 团队处理不同的函数,它们调用此函数并根据公共函数结果(真/假)为 json 提供检查/取消检查状态的每个团队/模块执行相关操作。因此,通用函数(比如 getcount)和调用该函数的每个独立团队都依赖于通用函数独立操作 dom/css 的结果,而通用函数也独立操作 dom。

而不是调用函数的传统方式(比如 getCount({"chk" : 2 , "unchk" : 4})),我正在寻找 pusblish/subcribe 方法,它比 Jquery 更干净,并且易于传达给所有人作为唯一的主题name & contract/json 需要描述(也少 if/else 条款)。由于通用功能是订阅者,并且当每个独立功能发布生成的 chk/unchek json 时,通用功能可以使用发布/订阅方法轻松进行操作,但独立方法也必须执行反操作,这只有在订阅功能可以的情况下才有可能发送结果。我知道javascript是异步的,我也知道通用方法可以发布(比如“resultOfGetCount”),每个独立的功能/模块都可以收听&

寻找这种情况的最佳方法。

4

1 回答 1

1

这是这篇博客文章中的一个简单的 jQuery 发布订阅模型

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 的 trigger 和 bind 函数。这些允许您侦听元素上的自定义事件,并手动触发元素上的事件。这为简单订阅模型提供了基本的骨干。

如果应用程序元素想要订阅主题,它们会将处理程序绑定到“订阅元素”。这可以是页面上的指定元素,也可以只是窗口元素。当然,您也可以为不同的订阅使用不同的元素。然后,当某些内容发布到该主题时,处理函数将执行。

对于发布,函数可以将主题和参数传递给发布函数。这会调用 jQuery 的触发器来触发事件主题,并传递参数。这些参数被传递给句柄函数。

如果一个元素想要取消它的订阅,他们可以将主题和句柄函数传递给 unsubscribe 方法。请注意,句柄必须与最初订阅时使用的函数对象相同,而不是副本或类似函数。你也可以使用 jQuery 的 unbind 来取消对某个主题的所有订阅,只指定主题而不使用句柄函数。

于 2013-03-27T15:00:22.823 回答