summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoss Hadden <rosshadden@gmail.com>2012-07-03 16:53:26 -0400
committerMike Sherov <mike.sherov@gmail.com>2012-10-15 10:27:56 -0400
commit9589ab89492c23e1d201f61617ae2a3bf54a0afc (patch)
treecb756f93aa8b2ddbe8a2baa705d3272de3ab3707
parent3212325173320eeb96406af1f49e4793fc09b1a2 (diff)
downloadhandlebars.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.js25
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;
});