diff --git a/package.json b/package.json index d549163a..ee9e476b 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "can-assign": "^1.1.1", "can-attribute-encoder": "^1.0.0", "can-child-nodes": "^1.0.0", + "can-define-lazy-value": "^1.0.2", "can-dom-data": "^1.0.1", "can-dom-data-state": "^1.0.0", "can-dom-mutate": "^1.0.0", diff --git a/src/mustache_core.js b/src/mustache_core.js index 072899ae..8465b064 100644 --- a/src/mustache_core.js +++ b/src/mustache_core.js @@ -15,6 +15,19 @@ var canSymbol = require("can-symbol"); var canReflect = require("can-reflect"); var dev = require("can-log/dev/dev"); var getDocument = require("can-globals/document/document"); +var defineLazyValue = require("can-define-lazy-value"); + +// Lazily lookup the context only if it's needed. +function HelperOptions(scope, nodeList, exprData, stringOnly) { + this.metadata = { rendered: false }; + this.stringOnly = stringOnly; + this.scope = scope; + this.nodeList = nodeList; + this.exprData = exprData; +} +defineLazyValue(HelperOptions.prototype,"context", function(){ + return this.scope.peek("this"); +}); // ## Types @@ -63,14 +76,7 @@ var core = { } var value, - helperOptions = { - metadata: { rendered: false }, - stringOnly: stringOnly, - context: scope.peek("this"), - scope: scope, - nodeList: nodeList, - exprData: exprData - }; + helperOptions = new HelperOptions(scope, nodeList, exprData, stringOnly); // set up renderers utils.createRenderers(helperOptions, scope, nodeList, truthyRenderer, falseyRenderer, stringOnly);