2013-09-28 48 views
4

在我的應用程序是一對夫婦爲自己負責的模塊,而這也正是我有一些困惑..如何在javascript模塊之間進行通信...?

  1. 如何模塊之間的溝通?

  2. 如何通知或監聽模塊以便爲合適的場景做出決定..?

例如:

模塊1,

var MyModule1 = (function() { 
    var myPrivateData = 303; 
    function myPrivateFunction() { 
    alert('private'); 
    } 
    return { 
    myPublicData : 42, 
    myPublicFunction : function() { 
     alert('public'); 
    } 
    }; 
})(); 

模塊2

var MyModule2 = (function() { 
    var myPrivateName = privatized; 
    function myPrivateFunction() { 
    alert(myPrivateName) ; 
    } 
    return { 
    myPublicData : 42, 
    myPublicFunction : function() { 
     alert('public'); 
    } 
    }; 
})(); 

我怎樣才能讓他們倆溝通和傾聽對方的..?任何人都可以請澄清一些小例子?我需要共享私人數據共享到模塊2和myPrivate名稱與模塊1共享,並在任何點擊事件觸發的情況下。

提前致謝!

+0

可能是。但我需要最好的方法,即使我的錯誤,請糾正我。 – 3gwebtrain

+1

嘗試實施發佈/訂閱模式。 http://stackoverflow.com/a/13513915/294076 – gearsdigital

+0

我建議使用沙箱,每個模塊不應該知道別人。 –

回答

0

像這樣的事情

var ParentClass = (function() { 
    var privateVariable = 'toto'; 
    this.publicVariable = 'titi'; 

    this.ChildClass = new ChildClass(this); 
    this.ChildClass.execute(); 
    }); 

    function ChildClass(parent) { this.parent = parent; return this; }; 

    ChildClass.prototype.execute = function() { 
    alert (this.parent.publicVariable); // show titi 
    }; 

ParentClass(); 
3

這裏是在瀏覽器內鬆散耦合的模塊組織的基本概念:

在代碼裏面模塊1需要通知其他的一些事件會做到這一點:

$(document).trigger("some:event", someData); 

而module2如果需要通知有關「some:event」的應該在其初始化代碼中做到這一點:

$(document).on("some:event", function(evt,someData) { 
    // ... do something with the data ... 
}); 

在這個模式中,兩個模塊是完全獨立的。他們唯一要知道的是他們正在與之通信的事件的名稱。

+0

哇,這將導致我重新考慮我的幾個應用程序。我使用模塊模式,但每個模塊與用戶交互,然後用這個概念,用戶捕獲的數據可以稍後使用。再次,WOW。 –

相關問題