【问题标题】:How to communicate between javascript modules...?如何在javascript模块之间进行通信......?
【发布时间】:2013-10-04 15:39:57
【问题描述】:

在我的应用程序中有几个模块各自负责,这就是我有些困惑的地方..

  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');
    }
  };
})();

我怎样才能让他们互相交流和倾听..?谁能用一些小例子来澄清一下?我需要共享与 module2 共享的 privateData 和与 module1 共享的 myPrivate 名称,以防触发任何点击事件。

提前致谢!

【问题讨论】:

  • 可能是。但我需要最好的方法,即使是我的错误,请纠正我。
  • 尝试实现发布/订阅模式。 stackoverflow.com/a/13513915/294076
  • 我建议使用沙箱,每个模块不应该知道其他模块。
  • @LightStyle,这就是我想知道的,你能举个例子吗?
  • 我不使用设计模式,因为我做的事情很简单,但是'2。如何在...之间通知或侦听模块'听起来像是观察者模式。如果您的应用程序很大/很复杂,您可能需要考虑使用设计模式。额外的代码,但结构良好。只是一个想法

标签: javascript jquery oop module


【解决方案1】:

这是浏览器内部松散耦合模块组织的基本概念:

当 module1 中的代码需要通知其他人某些事件时,它会这样做:

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

如果模块 2 需要被通知“some:event”,则应在其初始化时在其代码中执行此操作:

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

在这个架构中,两个模块是完全独立的。他们唯一需要知道的是他们正在与之通信的事件的名称。

【讨论】:

  • 哇,这会让我重新思考我的几个应用程序。我使用模块模式,但每个模块都与用户交互,然后通过这个概念,用户捕获的数据可以在以后使用。再次,哇。
【解决方案2】:

类似的东西

    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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多