diff options
author | Yehuda Katz <tomhuda@Yehudas-iMac.local> | 2011-12-27 15:57:08 -0800 |
---|---|---|
committer | Yehuda Katz <tomhuda@Yehudas-iMac.local> | 2011-12-27 15:57:08 -0800 |
commit | e474e56b804d55d294d7bd1ae6c37c4bc57eb1f0 (patch) | |
tree | 923644846a198ec60e0973d8bc95bfba939bd0e0 | |
parent | 69307d0e2b149228c1422ac30b6b2020b1a75ed9 (diff) | |
download | handlebars.js-e474e56b804d55d294d7bd1ae6c37c4bc57eb1f0.zip handlebars.js-e474e56b804d55d294d7bd1ae6c37c4bc57eb1f0.tar.gz handlebars.js-e474e56b804d55d294d7bd1ae6c37c4bc57eb1f0.tar.bz2 |
data should be passed through to partials. closes #111.
-rw-r--r-- | lib/handlebars/compiler/compiler.js | 8 | ||||
-rw-r--r-- | lib/handlebars/vm.js | 8 | ||||
-rw-r--r-- | spec/qunit_spec.js | 17 |
3 files changed, 29 insertions, 4 deletions
diff --git a/lib/handlebars/compiler/compiler.js b/lib/handlebars/compiler/compiler.js index 427e0a5..4bc1f82 100644 --- a/lib/handlebars/compiler/compiler.js +++ b/lib/handlebars/compiler/compiler.js @@ -638,7 +638,13 @@ Handlebars.JavaScriptCompiler = function() {}; }, invokePartial: function(context) { - this.pushStack("self.invokePartial(" + this.nameLookup('partials', context, 'partial') + ", '" + context + "', " + this.popStack() + ", helpers, partials);"); + params = [this.nameLookup('partials', context, 'partial'), "'" + context + "'", this.popStack(), "helpers", "partials"]; + + if (this.options.data) { + params.push("data"); + } + + this.pushStack("self.invokePartial(" + params.join(", ") + ");"); }, assignToHash: function(key) { diff --git a/lib/handlebars/vm.js b/lib/handlebars/vm.js index 7f9a42e..ecb4ce3 100644 --- a/lib/handlebars/vm.js +++ b/lib/handlebars/vm.js @@ -46,16 +46,18 @@ Handlebars.VM = { }; }, noop: function() { return ""; }, - invokePartial: function(partial, name, context, helpers, partials) { + invokePartial: function(partial, name, context, helpers, partials, data) { + options = { helpers: helpers, partials: partials, data: data }; + if(partial === undefined) { throw new Handlebars.Exception("The partial " + name + " could not be found"); } else if(partial instanceof Function) { - return partial(context, {helpers: helpers, partials: partials}); + return partial(context, options); } else if (!Handlebars.compile) { throw new Handlebars.Exception("The partial " + name + " could not be compiled when running in vm mode"); } else { partials[name] = Handlebars.compile(partial); - return partials[name](context, {helpers: helpers, partials: partials}); + return partials[name](context, options); } } }; diff --git a/spec/qunit_spec.js b/spec/qunit_spec.js index 3f9218d..6f5a192 100644 --- a/spec/qunit_spec.js +++ b/spec/qunit_spec.js @@ -650,6 +650,23 @@ test("passing in data to a compiled function that expects data - works with help equals("happy cat", result, "Data output by helper"); }); +test("passing in data to a compiled function that expects data - works with helpers in partials", function() { + var template = CompilerContext.compile("{{>my_partial}}", {data: true}); + + var partials = { + my_partial: CompilerContext.compile("{{hello}}", {data: true}) + }; + + var helpers = { + hello: function(options) { + return options.data.adjective + " " + this.noun; + } + }; + + var result = template({noun: "cat"}, {helpers: helpers, partials: partials, data: {adjective: "happy"}}); + equals("happy cat", result, "Data output by helper inside partial"); +}); + test("passing in data to a compiled function that expects data - works with helpers and parameters", function() { var template = CompilerContext.compile("{{hello world}}", {data: true}); |