Dojo或Javascript中的观察者

Dojo或Javascript中的观察者,javascript,dojo,Javascript,Dojo,如何在Dojo或Javascript中实现观察者模式?我在幻灯片31的这些幻灯片中找到了Javascript的观察者模式 我已经把它打在这里了 // The Observer Object - One who super sees all the print operations function printManager(){ var queue = []; //The attach method this.addJob = function(name, job){

如何在Dojo或Javascript中实现观察者模式?

我在幻灯片31的这些幻灯片中找到了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;
    } ...

我对它做了一个修改版本(针对我的使用),效果很好。这对我来说是一个很好的起点。

尽管我不确定它是否是Observer模式的直接实现,但Dojo Toolkit已经内置了事件系统

Dojo Connect: connect既可以用于将DOM事件连接到它们的处理程序,也可以用于将任何函数连接到任何其他函数

dojo.connect(obj, event, context, method);
发布/订阅: Dojo的发布/订阅可用于定义应用程序范围的主题,然后将处理程序附加/分离到它们

dojo.subscribe(topic, method);
dojo.publish(topic, parameters);
链接:


这两种技术都返回一个令牌,该令牌可用于断开处理程序的连接。

在Dojo中,这非常简单

  • dojo.connect
    将允许您在任何对象的任何函数上添加回调
  • Dojo的UI系统dijit有一个
    watch
    方法来为任何属性更改添加回调
  • 现在,在纯JavaScript中,它更为复杂,因为您不能为任意对象上的任意属性更新触发回调。您只能“劫持”属性函数,使其指向新函数,并且该函数在调用原始函数后执行回调。然而,您实际上是在重新实现dojo.connect,所以您也可以使用dojo


    因此,观察者模式只能用于JavaScript中的函数调用。

    。你知道Google closure是否有相当于dojo.connect的东西吗?不确定,我自己不使用closure库,但你应该阅读Michael Bolin的书closure-权威指南,看看你是否找到了它。