How To Structure Javascript When Including Another Php File
I am attempting to build a small web application but I'm not clear how to communicate between different parts of the page. I will use my specific functionality to demonstrate my qu
Solution 1:
One way to do it is to initialize an empty array to hold callback functions and the sign function to call them, before any of the other javascript:
var userSignedInCallbacks = [];
var userSignedIn = function() {
for (var i = 0; i < userSignedInCallbacks.length; i++) {
userSignedInCallbacks[i]();
}
}
Then, toolbar and main page js will both just add their appropriate callbacks to the array:
userSignedInCallbacks.push(function() {
// ...
});
Finally, the login actions in either the toolbar or main page will both just call userSignedIn()
.
Solution 2:
One way you could do this is by using the publisher-subscriber pattern for handling communications between different modules in your page so that every modules is only coupled on an event interface.
I created a very simple example here. It doesn't handle the logout process but you can still see how things could be structured.
HTML
<divid="toolbar"><buttonclass="login">Login</button></div><divid="another-section"><buttonclass="login">Login</button></div><divid="login-dialog"><buttonclass="login">Do login!</button></div>
JS
//in EventBus.jsvarEventBus = {
subscribers: {},
publish: function (eventName) {
var args = Array.prototype.slice.call(arguments, 1),
subscribers = this.subscribers[eventName] || [],
i = 0,
len = subscribers.length,
s;
for (; i < len; i++) {
s = subscribers[i];
s.fn.apply(s.scope, args);
}
},
subscribe: function (eventName, fn, scope) {
var subs = this.subscribers[eventName] = this.subscribers[eventName] || [];
subs.push({ fn: fn, scope: scope });
}
};
//in toolbar.jsfunctionToolbar(el, eventBus) {
var $el = this.$el = $(el),
$loginButton = $('button.login', $el);
$loginButton.click(function () {
eventBus.publish('userWantsToLogin');
});
eventBus.subscribe('userLoggedIn', function () {
$loginButton.html('Logout');
//change button handlers to handle logout...
});
}
//in another-section.jsfunctionAnotherSection(el, eventBus) {
var $el = this.$el = $(el),
$loginButton = $('button.login', $el);
$loginButton.click(function () {
eventBus.publish('userWantsToLogin');
});
eventBus.subscribe('userLoggedIn', function () {
$loginButton.html('Logout');
//change button handlers to handle logout...
});
}
//in main.js
$(function () {
var $loginDialog = $('#login-dialog');
$loginDialog.dialog({ autoOpen: false});
$('button.login', $loginDialog).click(function () {
EventBus.publish('userLoggedIn');
});
EventBus.subscribe('userWantsToLogin', function () {
$loginDialog.dialog('open');
});
newToolbar('#toolbar', EventBus);
newAnotherSection('#another-section', EventBus);
});
Post a Comment for "How To Structure Javascript When Including Another Php File"