diff options
author | Ross Hadden <rosshadden@gmail.com> | 2012-07-03 16:53:26 -0400 |
---|---|---|
committer | Mike Sherov <mike.sherov@gmail.com> | 2012-10-15 10:27:56 -0400 |
commit | 9589ab89492c23e1d201f61617ae2a3bf54a0afc (patch) | |
tree | cb756f93aa8b2ddbe8a2baa705d3272de3ab3707 | |
parent | 3212325173320eeb96406af1f49e4793fc09b1a2 (diff) | |
download | handlebars.js-9589ab89492c23e1d201f61617ae2a3bf54a0afc.zip handlebars.js-9589ab89492c23e1d201f61617ae2a3bf54a0afc.tar.gz handlebars.js-9589ab89492c23e1d201f61617ae2a3bf54a0afc.tar.bz2 |
Implemented ability to iterate over objects, ala for-in.
Also added the 'key' key to looped objects.
My goal is to make this {{@key}}, but am still working on it.
I would also like to unobtrusively make @key or @index work for arrays.
-rw-r--r-- | lib/handlebars/base.js | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/lib/handlebars/base.js b/lib/handlebars/base.js index d22eb40..03f41ef 100644 --- a/lib/handlebars/base.js +++ b/lib/handlebars/base.js @@ -64,20 +64,33 @@ Handlebars.createFrame = Object.create || function(object) { Handlebars.registerHelper('each', function(context, options) { var fn = options.fn, inverse = options.inverse; - var ret = "", data; + var i = 0, ret = "", data; if (options.data) { data = Handlebars.createFrame(options.data); } - if(context && context.length > 0) { - for(var i=0, j=context.length; i<j; i++) { - if (data) { data.index = i; } - ret = ret + fn(context[i], { data: data }); + if(context && typeof context === 'object') { + if(context instanceof Array){ + for(var j = context.length; i<j; i++) { + if (data) { data.index = i; } + ret = ret + fn(context[i], { data: data }); + } + } else { + for(var key in context) { + if(context.hasOwnProperty(key)) { + if(data) { data.key = key; } + ret = ret + fn(context[key], {data: data}); + i++; + } + } } - } else { + } + + if(i === 0){ ret = inverse(this); } + return ret; }); |