javascript - How to render array into specific form for mustache to render -
i array of objects image locations via api , can't manage render it.
i managed array chuncks of 4 using underscore, can't head around how massage data correct form render out through mustache.
the code looks this:
var template = "<ul>{{#images}}<li>{{location}}</li>{{/images}}</ul>"; var data = [ {"location":"gallery\/baar_toit_5.jpg"}, {"location":"gallery\/baar_toit_7.jpg"}, {"location":"gallery\/baar_toit_8.jpg"}, {"location":"gallery\/baar_int_1.jpg"}, {"location":"gallery\/baar_int_2.jpg"}, {"location":"gallery\/baar_int_3.jpg"}, {"location":"gallery\/baar_int_4.jpg"}, {"location":"gallery\/baar_uus_01.jpg"}, {"location":"gallery\/baar_uus_02.jpg"}, {"location":"gallery\/baar_uus_03.jpg"}, {"location":"gallery\/baar_uus_04.jpg"}, {"location":"gallery\/baar_uus_05.jpg"}, {"location":"gallery\/baar_uus_06.jpg"}, {"location":"gallery\/baar_uus_07.jpg"} ]; var n = 4; var imgs = _.groupby(data, function(element, index){ return math.floor(index/n); }); console.log(imgs); mustache.parse(template); var rendered = mustache.render(template, { imgs: json.parse(imgs) }); $('#gallery').html(rendered); i created small sandbox testing purposes, feel free play around it: http://jsfiddle.net/qk5nt/149/
my desired output is:
<ul> <li> <p>img/1.jpg</p> <p>img/2.jpg</p> <p>img/3.jpg</p> <p>img/4.jpg</p> </li> <li> <p>img/5.jpg</p> <p>img/6.jpg</p> <p>img/5.jpg</p> <p>img/6.jpg</p> </li> <li> <p>img/5.jpg</p> <p>img/6.jpg</p> <p>img/5.jpg</p> <p>img/6.jpg</p> </li> <li> <p>img/5.jpg</p> <p>img/6.jpg</p> </li> </ul> any appreciated!
groupby isn't right tool job, objects aren't ordered in javascript there's no guarantee you'll chunks in right order. yes, means canonical answer chunking wrong.
so first problem chunk data. if you're using lodash, use _.chunk. if you're using plain underscore, mixin own _.chunk , lodash version can adapted:
_.mixin({ chunk: function(a, n) { // based on lodash's var = 0, length = a.length, ri = -1; var result = array(math.ceil(length / n)); while(i < length) result[++ri] = a.slice(i, += n); return result; } }); now can chunk data fours , array-of-arrays out in right order:
var chunks = _(data).chunk(4); then want hand chunks template:
var rendered = mustache.render(template, { chunks: chunks }); and finally, template needs iterate on chunks produce <li>s , iterate on each chunk produce <p>s inside <li>s. this:
<ul> {{#chunks}} <li> {{#.}} <p>{{location}}</p> {{/.}} </li> {{/chunks}} </ul>
Comments
Post a Comment