Handlebarsテンプレートを使用しており、JSONデータは[Object object]で既に表されていますが、このデータをHandlebarsの外で解析するにはどうすればよいですか?たとえば、私はhandlebarsタグを使用してページ上のJavaScript変数を設定しようとしていますが、これは機能しません。
助言がありますか?ありがとうございました!
編集:
明確にするために、テンプレートにExpressJS w/Handlebarsを使用しています。私のルートでは、これがあります:
_var user = {}
user = {'id' : 123, 'name' : 'First Name'}
res.render('index', {user : user});
_
次に、index.hbsテンプレートに、_{{user}}
_オブジェクトがあります。 _{{#each}}
_を使用して、オブジェクトを適切に反復処理できます。ただし、Backbonejsも使用しているため、このデータを次のようにビューに渡します。
myView = new myView({user : {{user}});
問題は、_{{user}}
_がconsole.logに入れると、ソースに_[Object object]
_と表示されるだけで、エラー「予期しない識別子」が表示されることです。
_{{user}}
_を出力するとき、Handlebarsは最初にuser
の.toString()
値を取得します。プレーンObject
sの場合、 これのデフォルトの結果は_"[object Object]"
_ になります。
より便利なものを取得するには、オブジェクトの特定のプロパティを表示する必要があります。
_{{user.id}}
{{user.name}}
_
または、ヘルパーを使用/定義して、オブジェクトを別の方法でフォーマットできます。
_Handlebars.registerHelper('json', function(context) {
return JSON.stringify(context);
});
_
_myView = new myView({
user : {{{json user}}} // note triple brackets to disable HTML encoding
});
_
stringify JSONをシンプルにすることができます:
var user = {}
user = {'id' : 123, 'name' : 'First Name'};
// for print
user.stringify = JSON.stringify(user);
次に、テンプレートで次の方法で印刷します。
{{{user.stringify}}};
Node-jsでサーバー側のテンプレートを使用していますが、これはクライアント側にも適用される場合があります。ノードに Jonathan のjsonヘルパーを登録します。ハンドラーで、res.localsを介してコンテキスト(addressBookなど)を追加します。次に、クライアント側のコンテキスト変数を次のように保存できます。
<script>
{{#if addressBook}}
console.log("addressBook:", {{{json addressBook}}});
window.addressBook = {{{json addressBook}}};
{{/if}}
</script>
トリプルカーリーに注意してください( Jim Li で指摘)。
無効なJSONオブジェクト内でテンプレート構文_{{ }}
_を渡そうとしています。
代わりにこれを行う必要があるかもしれません:
myView = new myView({ user : user });