Javascript 使用发布/订阅模式时如何处理依赖关系

Javascript 使用发布/订阅模式时如何处理依赖关系,javascript,observer-pattern,publish-subscribe,Javascript,Observer Pattern,Publish Subscribe,当使用发布/订阅模式时,我有时会面临一个缺点:在系统的各个部分之间。我将它用于web开发,特别是JavaScript密集型web应用程序 有哪些方法可以减少、明确化或删除表单模块的依赖关系(在验证模块上),如下例所示 var Event = require('some-pub-sub-library'); // E.g. github.com/mroderick/PubSubJS var events = { formBeforeSubmit: 'form/beforeSubmit',

当使用发布/订阅模式时,我有时会面临一个缺点:在系统的各个部分之间。我将它用于web开发,特别是JavaScript密集型web应用程序

有哪些方法可以减少、明确化或删除
表单
模块的依赖关系(在
验证
模块上),如下例所示

var Event = require('some-pub-sub-library'); // E.g. github.com/mroderick/PubSubJS

var events = {
  formBeforeSubmit: 'form/beforeSubmit',
  formSubmit: 'form/submit',
  validation: 'validation/go',
  validationOk: 'validation/ok'
};

(function() { // FORM MODULE
  var submit = false;

  $('form').on('submit', function() {
    if (submit == false) {
      // For the validation to do its thing
      Event.publish(events.formBeforeSubmit);
      return false; // Don't submit the form
    }
    return true;
  });

  // The validation should publish this event
  Event.subscribe(events.submit, function() {
    submit = true;
    $('form').trigger('submit');
  });
}());

(function() { // VALIDATION MODULE
  Event.subscribe(events.formBeforeSubmit, function() {
    if ($('input').val() == 'foo')
      Event.publish(events.submit); // Validation passed
    else
      alert('Validation didn\'t pass.');
  });
}());

我不确定,但是如果您的pubsub库是同步的并且没有缓存,那么
事件.subscribe(events.submit,…)
需要在
事件.publish(events.formBeforeSubmit)
之前发生。Hi@Bergi,实际上它将在发布之前订阅,因为发布取决于用户交互(提交表单)。我当前的库是异步的,但是我会考虑切换到同步,如果这将帮助我与解耦模块彼此!不,我不是指验证订阅(
formBeforeSubmit
),而是该表单中的订阅提交处理程序,它等待验证结果。pub-sub之所以有效,是因为您的库是异步的,但是在这种情况下,
return submit==true
总是产生false@Bergi我编辑过。现在它更有意义了吗?