Hi, I guess my question/issue was out of place here -- sorry about the noise!
Merc. On Thursday, March 28, 2013 1:02:30 PM UTC+8, Tony Mobily wrote: > > Hi guys, > > This is my first post here. I am fairly new to node, and very new to > Javascript although I have been programming for a number of years. > I am writing a framework to write store-based, SaaS applications easily > using node. In order to do that, I decided to create a system where each > module would: > > * Be initialised > * Be based on hooks/signals -- emitting and subscribing -- to do their job > > What I came up with is Hotplate: > https://github.com/mercmobily/hotplate/blob/master/hotplate.js > Please keep in mind that this is quite preliminary code: function names > tend to suck, etc. It was also pretty much the first real thing I ever > wrote in node. > > In my server.js file I have something like this: > > hotplate.setApp(app) > hotplate.set( 'staticUrlPath', '/hotplate' ); // Set the static URL > path for all modules > hotplate.set( 'dgrid-theme', 'claro' ); > > //... > > // Register modules > hotplate.registerAllEnabledModules('node_modules', /^hotCore/ ); // > Register all core modules from hotplate's node_modules's dir > hotplate.registerAllEnabledModules('node_modules', /^hotDojo/ ); > hotplate.registerAllEnabledModules('node_modules', /^hotMongo/ ); > hotplate.initModules( function() { > > app.configure(function(){ > //... > > registerAllEnabledModules, other than having a name that is too long of > its own good, will basically: > > 1) Load those modules > 2) Once they are all loaded, will call their init() functions **in the > right order**. > > The part where I write "in the right order" is the most important one. > Take for example the module 'hotCorePage': in its init, it does this: > > HotCorePage.prototype.hotHooks.init = function( done ){ > > var that = this; > > hotplate.invokeAll('pageElements', function(err, results){ > enrichElementsWithResults( that, results ) > > that.pageTemplate = replacePageElements( that.pageTemplate, { > csses:that.csses, > jses:that.jses, > vars:that.vars, > headLines:that.headLines > } ); > > done( null ); > > }); > } > HotCorePage.prototype.hotHooks.init.invokes = [ 'pageElements' ]; > > Note that hotCorePage invokes "pageElements". The point here is that all > modules providing pageElements will need to be initialised *before* > hotCorePage, so that their pageElements function can actually work > properly. Rather than inspecting the function, I declare explicitly what > hooks an init() function will invoke (see the last line). Any module > providing those hooks will be initialised _before_ hotCorePage. > > The main reason why I am writing here is... well, to: > > * get some confirmation that I didn't do anything horrific > * ideas of how this could be done differently (I wouldn't be surprised if > there was a much easier, much better way of doing all this) > * general feedback > > As I mentioned, the code is not yet polished. However, you _can_ create a > working SaaS, multi-homed, with user registration etc. in less than 5 > minutes using it. > > Thanks for listening, > > Merc. > -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
