From 9ffa2c9a1a4d6cc5ae6c368b39ce7d98b5bbf4dd Mon Sep 17 00:00:00 2001 From: Davis Clark Date: Thu, 12 Jan 2012 23:55:09 -0600 Subject: [PATCH] added template cacher param to the renderer signature, and before/after render event arguments. Updated the default mustache renderer to work with the new signature. --- lib/view.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/view.js b/lib/view.js index 0f25fa6..356a1ef 100644 --- a/lib/view.js +++ b/lib/view.js @@ -57,6 +57,16 @@ ViewEngine.prototype.cacheView = function(path) { }.bind(this)); }; +/** + * @api private + */ +ViewEngine.prototype.getCacher = function(path) { + var self = this; + return function(val) { + self.viewCache[path] = val; + } +} + ViewEngine.prototype.respond = function(view, opts) { opts = opts || {}; @@ -88,8 +98,9 @@ ViewEngine.prototype.render = function(view, opts) { layout = layout === true ? 'layout' + ext : layout; return when(this.viewCache[viewPath] || this.cacheView(viewPath), - function success(str) { + function success(template) { var renderedView + , cacher , jsName = setting('shared js name') || 'javascript' , namespace = setting('shared js namespace') || 'bogart'; @@ -115,11 +126,12 @@ ViewEngine.prototype.render = function(view, opts) { opts._renderedShared = true; } - self.emit('beforeRender', self, opts, str); - - renderedView = renderer(str, opts, self); + self.emit('beforeRender', self, opts, template, cacher); + + cacher = self.getCacher(viewPath); + renderedView = renderer(template, opts, cacher, self); - self.emit('afterRender', self, opts, str); + self.emit('afterRender', self, opts, template, cacher); return when(renderedView, function(renderedView) { if (layout) { @@ -208,7 +220,7 @@ exports.viewEngine.engine = function(engineName) { return engines[engineName]; }; -exports.viewEngine.addEngine('mustache', function(str, opts, viewEngine) { +exports.viewEngine.addEngine('mustache', function(str, opts, cache, viewEngine) { var partialPromises = [] , partials = {} , viewPath;