2017-07-14 5 views
0

In meinem gulpfile ich definiere eine MEMBER Array von Objekten auf die Vorlage übergeben:Lenker js Objekt Iteration

var gulp = require('gulp'); 
var handlebars = require('gulp-compile-handlebars'); 
var rename = require('gulp-rename'); 
var handlebars_helpers = require('handlebars-helpers')(); 
//http://assemble.io/helpers/helpers-html.html 
var _ = require('underscore'); 

gulp.task('default', function() { 
    var templateData = { 
     memberInfo: [ 
      {"member_email": "[email protected]", "list_id": "2", "name": "obsession cologne 3 oz", "brand": "", "price": "55.99"}, 
      {"member_email": "[email protected]", "list_id": "1", "name": "red plaid skirt", "brand": "versace", "price": "55.99"}, 
      {"member_email": "[email protected]", "list_id": "1", "name": "black ruffle shirt", "brand": "versace", "price": "47.99"}, 
     ] 
    } 

    options = { 
     helpers: _.extend(handlebars_helpers) 
    } 

    return gulp.src('template/email.handlebars') 
     .pipe(handlebars(templateData, options)) 
     .pipe(rename('email.html')) 
     .pipe(gulp.dest('output')); 
} 

Was will ich auf meiner Vorlage zu tun ist, sagen: „für jedes Objekt in MEMBER, wenn die list_id ist gleich 1, diese Felder anzeigen "

{{name}} 
{{brand}} 
{{price}} 

Was ist der richtige Weg, dies zu tun? Ich bin nagelneu zu Schluck und Lenker und die Erklärungen, die ich gefunden habe, scheinen in diesem Zusammenhang keinen Sinn zu machen. Lenker-Helfer hat einen geschickten Vergleichsoperator {{#is }} so dass ich diesen Code geschrieben, aber es ist offensichtlich nicht korrekt gesetzt ist:

<ul> 
    {{#each memberInfo}} 
    {{#each this}} 
     <li>Key: {{@key}} Value = {{this}}</li> 
     {{#is @key 'list_id' }} 
      {{#is this 1 }} 
       {{name}} 
       {{brand}} 
       {{price}} 
       //Nothing is accessible here except this, as far as i can tell, so none of these values render 

      {{/is}} 
     {{/is}} 

    {{/each}} 
    {{/each}} 
</ul> 

Antwort

0

ich für diese Hälfte assed Kommentar entschuldigen, aber ich habe keine Zeit voll Antwort haben es gerade jetzt. Ich hatte eine ähnliche Situation, aber ich suchte nach der Anzahl der übereinstimmenden Elemente und rendere sie. Hier ist der Lenker Helfer, und ich hoffe, dass die Idee dazu hilft. Lass es mich wissen, wenn nicht und ich kann bald etwas mehr Kontext hinzufügen.

exports.filterLength = function (object, property, value, options) { 
    var ret = 0; 

    for (var i = 0, j = object.length; i < j; i++) { 
    if (object[i][property] === value) { 
     ret = ret + 1; 
    } 
    } 
    return ret;  
};