2016-11-18 7 views
0

ハンドルバーテンプレート内の小さなHTMLのチャンクをJSONオブジェクトの一部に変換する必要があります。ここではハンドルバーテンプレートの関連部分です:ハンドルバーでJSONを生成する

<ul> 
    {{#each props.items}} 
    <li> 
     <a>{{name}}</a> 
    </li> 
    {{/each}} 
</ul> 

私が直面してる問題は、私はJSONオブジェクト内の最終的な出力は、文字列の配列(最終的なコードの1行につき1つ)のいずれかである必要があることであるOR改行のない単一の文字列。代わりに、最後のブロック全体を1つの文字列として取得しますが、と改行を付けて - JSONが無効になります。

私はHandlebarsテンプレートまたはJSONを所有していないので、どちらも変更できません。ここで

は私のコードは、現在、次のようになります。

var fileContents = Plugins.fs.readFileSync(hbsPath, "utf8"); 

//Next line is my latest attempt to close each line with quotes, 
//inject a newline and start new line with quotes. 
//It doesn't work - the newline isn't inserted. 
//I've also tried \n\r, \r\n, \r 

fileContents = fileContents.replace(/(\r\n|\n|\r)/gm, "\",\n\""); 

var template = hbs.compile(fileContents); 
var thisProps = {props: props}; 
return new hbs.SafeString(template(thisProps)); 

私は単にコンソールに返された文字列を記述する場合、それは右に見えますが、私はそれでJSONファイルを作成するときに、終端されていない文字列は次のようにフラグが付けられます無効。

更新は:JSONは、画像に入ってくるのはここです:

{ 
    "code" : [{{renderSnippet "MyPartial" MyModel }}] 
} 

これはハンドルのプロセスと{{ }}内側部分がハンドルバーから出てくる文字列に置き換えられたファイルです。その文字列は問題です。行内にJSONを無効にする改行が含まれています。私はそれを改行なしの単一の文字列にするか、文字列の配列を別々の文字列として各行に加える必要があります。

任意のポインタ?

ありがとうございました。

+0

あなたはJSON文字列を作成する方法を示していなければなりません。 –

+0

@ t.niese:ハンドルバーがそうしています。それは問題です - 私はそれを制御していません。上の2番目のスニペットの最後の3行は、上記の最初のスニペットで、Handlebarsテンプレートの文字列生成を処理します。 – TimTheEnchanter

+0

ハンドルバーは文字列を返しますが、JSONは作成しません。なぜあなたはJSONを作成すると思いますか? –

答えて

1

私がすでにコメントに述べたように、HandlebarsはJSONを作成しません。 Handlebarsはhtmlをターゲットとするテンプレートエンジンなので、htmlや同じエスケープや類似のエスケープを持つ言語でのみうまく動作します。あなたはJSONに変換するオブジェクトに{{renderSnippet "MyPartial" MyModel }}の結果を格納する必要があります。そのような

何か:

var renderSnippedTpl = Handlebars.compile('{{renderSnippet "MyPartial" MyModel }}'); 

var obj = { 
    code : [renderSnippedTpl({/*required params*/})] 
} 

console.log(JSON.stringify(obj)); 
+0

OK、ありがとうございます。これは私が行くべき方向を見つけ出すのを助けました。 – TimTheEnchanter

関連する問題