2013-09-28 37 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。 –