2016-07-25 17 views
0

Ich möchte JSON-Datei über Helper zu partiellen analysieren. Ich bin derzeit mit Technik von dieser Seite:GruntJS Assembly JSON-Datei von Helper zu partiellen assemblieren

Parsing Json data into partial

Es funktioniert sehr gut, aber ich möchte gesamte JSON-Datei analysieren:

{{#parseJSON jsonfile}} 

statt, dies zu tun:

{{#parseJSON '{"id": "firstname", "label": "First name"}'}} 

# Jeder Helfer funktioniert durch Übergabe Json-Datei

{{#each jsonfile}} 
    {{> partial}} 
{{/each}} 

Ist es möglich, dies mit einem benutzerdefinierten Helfer zu tun?

Antwort

0

Sie können dies mit einem benutzerdefinierten Helfer tun. Sie können entweder einen Blockhelfer erstellen, der wie der Helper {{#each}} funktioniert, oder Sie können einen Inline-Helper erstellen, der das Json-Objekt zum Iterieren zurückgibt und als Unterausdruck verwendet.

data.json

{ 
    "brian": { "id": "brian", "label": "Brian" }, 
    "cataylyst": { "id": "cataylyst": "label": "The Cataylyst" } 
} 

Block helper

var path = require('path'); 
var fs = require('fs'); 
var each = Handlebars.helpers.each; 
Handlebars.register('eachJSON', function(filepath, options) { 
    try { 
    var data = JSON.parse(fs.readFileSync(path.resolve(filepath), 'utf8')); 
    return each.call(this, data, options); 
    } catch (err) { 
    console.error(err); 
    return '' 
    } 
}); 

inline helper

var path = require('path'); 
var fs = require('fs'); 
Handlebars.register('readJSON', function(filepath, options) { 
    try { 
    return JSON.parse(fs.readFileSync(path.resolve(filepath), 'utf8')); 
    } catch (err) { 
    console.error(err); 
    return '' 
    } 
}); 

Nutzung

{{!using the block helper}} 
{{#eachJSON "data.json"}} 
    {{> partial this}} 
{{/each}} 

{{!using the inline helper with the built in each block}} 
{{#each (readJSON "data.json")}} 
    {{> partial this}} 
{{/each}} 

ziehe ich den zweiten Ansatz, weil es Ihnen die Möglichkeit gibt, die readJSON Helfer in anderen Orten zu verwenden. Die Verwendung des eingebauten each-Helfers stellt außerdem sicher, dass Sie die gleiche Funktionalität wie mit dem each-Helper für ein Objekt oder Array erhalten, das sich bereits im Kontext befindet.

Hoffe diese Helfer.