From 411edae06129af7816e37cd7904869e6e45618d2 Mon Sep 17 00:00:00 2001 From: Michael Jackson Date: Tue, 5 Nov 2013 06:40:25 -0800 Subject: [PATCH] Fix [object Object] errors Fixes #322 Fixes #330 Fixes #331 Fixes #334 --- mustache.js | 11 ++++++----- test/_files/zero_view.js | 1 + test/_files/zero_view.mustache | 1 + test/_files/zero_view.txt | 1 + test/context-test.js | 17 +++++++++++++++++ 5 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 test/_files/zero_view.js create mode 100644 test/_files/zero_view.mustache create mode 100644 test/_files/zero_view.txt diff --git a/mustache.js b/mustache.js index 81582ee..89e3aca 100644 --- a/mustache.js +++ b/mustache.js @@ -121,7 +121,7 @@ }; function Context(view, parent) { - this.view = view || {}; + this.view = view == null ? {} : view; this.parent = parent; this._cache = {}; } @@ -135,9 +135,10 @@ }; Context.prototype.lookup = function (name) { - var value = this._cache[name]; - - if (!value) { + var value; + if (name in this._cache) { + value = this._cache[name]; + } else { if (name === '.') { value = this.view; } else { @@ -148,7 +149,7 @@ value = context.view; var names = name.split('.'), i = 0; - while (value && i < names.length) { + while (value != null && i < names.length) { value = value[names[i++]]; } } else { diff --git a/test/_files/zero_view.js b/test/_files/zero_view.js new file mode 100644 index 0000000..9864608 --- /dev/null +++ b/test/_files/zero_view.js @@ -0,0 +1 @@ +({ nums: [0, 1, 2] }) diff --git a/test/_files/zero_view.mustache b/test/_files/zero_view.mustache new file mode 100644 index 0000000..1cdc190 --- /dev/null +++ b/test/_files/zero_view.mustache @@ -0,0 +1 @@ +{{#nums}}{{.}},{{/nums}} \ No newline at end of file diff --git a/test/_files/zero_view.txt b/test/_files/zero_view.txt new file mode 100644 index 0000000..2aee585 --- /dev/null +++ b/test/_files/zero_view.txt @@ -0,0 +1 @@ +0,1,2, \ No newline at end of file diff --git a/test/context-test.js b/test/context-test.js index 752f74b..808b253 100644 --- a/test/context-test.js +++ b/test/context-test.js @@ -43,6 +43,23 @@ describe('A new Mustache.Context', function () { }); }); +describe('A Mustache.Context', function () { + var context; + + describe('with an empty string in the lookup chain', function () { + var view, context; + beforeEach(function () { + view = { a: '' }; + view.a.b = 'value'; + context = new Context(view); + }); + + it('is able to lookup a nested property', function () { + assert.equal(context.lookup('a.b'), view.a.b); + }); + }); +}); + describe('Mustache.Context.make', function () { it('returns the same object when given a Context', function () { var context = new Context;