【发布时间】:2015-12-07 18:04:17
【问题描述】:
我有两个 javascript 模块,它们作用于页面的不同部分。现在,正如您所看到的,我正在使用PubSubJS 库来发布、订阅和传输数据,如果需要以解耦的方式从一个模块到另一个模块。但我在想我是否可以完全省略 PubSubJS 库使用 JQuery 承诺(或任何其他本机 JQuery 方法)来实现相同的目标。我对 JQuery 的承诺不太好,因此需要这个问题。有人可以用 JQuery 为我提供更好的解决方案吗?
var salesOrder = (function() {
"use strict";
var $root, $salesOrderNo, $closeButton;
var _init = function() {
$root = $("#sales-order")
$closeButton = $root.find("#close-button");
_attachEvents();
};
var _attachEvents = function() {
$closeButton.on("click", _closeSalesOrder);
};
var _closeSalesOrder = function() {
PubSub.publish("ui.unloadShell", "closed"); //Here I'm publishing
}
return {
init: _init
}
})();
$(document).ready(salesOrder.init);
第二个模块也是如此
var erpTest = (function() {
"use strict";
var $root, $btnMenu, $shell;
var _init = function() {
$root = $("body")
$btnMenu = $root.find(".menu-button");
$shell = $root.find("#shell");
_attachEvents();
}
var _attachEvents = function() {
$btnMenu.on("click", _loadShell);
PubSub.subscribe('ui.unloadShell', _unloadShell); //Here I'm subscribing
}
var _loadShell = function(evt) {
var url = $(evt.target).data("url");
if (url && url.length) {
$shell.load(url, _loadCompleted);
}
};
var _unloadShell = function(evt, data) {
$shell.html(null); //Here is the subscribed handler
};
var _loadCompleted = function(evt) {
$.each([buttonModule.init, nameModule.init], function(index, func) {
func($shell);
});
};
return {
init: _init
}
})();
$(document).ready(erpTest.init);
【问题讨论】:
标签: javascript jquery html observer-pattern