簡體   English   中英

Dojo或Javascript中的觀察者

[英]Observer in Dojo or Javascript

如何在Dojo或Javascript中實現觀察者模式?

雖然我不確定它是否是Observer Pattern的直接實現,但Dojo Toolkit已經內置了事件系統。

Dojo Connect: dojo.connect既可以用於將DOM事件連接到其處理程序,也可以用於將任何函數連接到任何其他函數。

dojo.connect(obj, event, context, method);

發布/訂閱: Dojo的發布/訂閱可用於定義應用程序范圍的主題,然后將處理程序附加/分離給它們。

dojo.subscribe(topic, method);
dojo.publish(topic, parameters);

鏈接:

這兩種技術都返回一個可用於斷開處理程序的令牌。

在Dojo,這很容易。

  1. dojo.connect將允許您在任何對象的任何函數上添加回調。
  2. dijit,Dojo的UI系統,有一個watch方法,可以為任何屬性更改添加回調。

現在,在純JavaScript中,它涉及更多,因為您不能在任何任意對象上觸發任何任意屬性更新的回調。 你只能“劫持”一個屬性函數,使它指向一個新函數,並且該函數在調用原始函數后進行回調。 但是,你基本上重新實現了dojo.connect所以請關注Dojo。

因此,觀察者模式只能用於JavaScript中的函數調用。

我在幻燈片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;
    } ...

我做了一個這個的修改版本(具體到我使用),它工作得很好。 這對我來說是一個很好的起點。

暫無
暫無

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

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