web-dev-qa-db-ja.com

[オブジェクトオブジェクト]の代わりにHandlebars.js解析オブジェクト

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]_と表示されるだけで、エラー「予期しない識別子」が表示されることです。

65
dzm

_{{user}}_を出力するとき、Handlebarsは最初にuser.toString()値を取得します。プレーンObjectsの場合、 これのデフォルトの結果は_"[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
});
_
141

stringify JSONをシンプルにすることができます:

var user = {}
user = {'id' : 123, 'name' : 'First Name'};
// for print
user.stringify = JSON.stringify(user);

次に、テンプレートで次の方法で印刷します。

{{{user.stringify}}};
11
nguyên

Node-jsでサーバー側のテンプレートを使用していますが、これはクライアント側にも適用される場合があります。ノードに Jonathan のjsonヘルパーを登録します。ハンドラーで、res.localsを介してコンテキスト(addressBookなど)を追加します。次に、クライアント側のコンテキスト変数を次のように保存できます。

<script>
  {{#if addressBook}}
  console.log("addressBook:", {{{json addressBook}}});
  window.addressBook = {{{json addressBook}}};
  {{/if}}
</script>

トリプルカーリーに注意してください( Jim Li で指摘)。

4
Jeff Lowery

無効なJSONオブジェクト内でテンプレート構文_{{ }}_を渡そうとしています。

代わりにこれを行う必要があるかもしれません:

myView = new myView({ user : user });

1
Terry