Javascript 使用发布/订阅模式时如何处理依赖关系
当使用发布/订阅模式时,我有时会面临一个缺点:在系统的各个部分之间。我将它用于web开发,特别是JavaScript密集型web应用程序 有哪些方法可以减少、明确化或删除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',
表单
模块的依赖关系(在验证
模块上),如下例所示
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我编辑过。现在它更有意义了吗?