如何在Dojo或Javascript中实现观察者模式?
答案 0 :(得分:7)
虽然我不确定它是否是Observer Pattern的直接实现,但Dojo Toolkit已经内置了事件系统。
Dojo Connect: dojo.connect既可以用于将DOM事件连接到它们的处理程序,也可以用于将任何函数连接到任何其他函数。
dojo.connect(obj, event, context, method);
发布/订阅:强> Dojo的发布/订阅可用于定义应用程序范围的主题,然后将处理程序附加/分离给它们。
dojo.subscribe(topic, method);
dojo.publish(topic, parameters);
链接:
这两种技术都会返回一个可用于断开处理程序的令牌。
答案 1 :(得分:3)
在Dojo中很容易。
dojo.connect
将允许您在任何对象的任何函数上添加回调。watch
方法为任何属性更改添加回调。现在,在纯JavaScript中,它更复杂,因为您无法在任意对象上触发任何属性更新的回调。你只能“劫持”一个属性函数,使它指向一个新函数,并且该函数在调用原始函数后进行回调。但是,你基本上重新实现了dojo.connect
,所以请关注Dojo。
因此,观察者模式只能用于JavaScript中的函数调用。
答案 2 :(得分:2)
我在幻灯片31上的这些幻灯片http://www.slideshare.net/rmsguhan/javascript-design-patterns中找到了javascript的观察者模式。
我在这里输入了
// The Observer Object - One who super sees all the print operations
function printManager(){
var queue = [];
//The attach method
this.addJob = function(name, job){
queue.push({"name":name,"job":job});
}
//the detach method
this.removeJOb = function(job){
var _queue = [];
for(var i in queue){
if(queue[i].job == job)
continue;
else
_queue.push(queue[i]);
}
queue = _queue;
} ...
我对此进行了修改(特定于我使用)并且工作正常。这对我来说是一个很好的起点。