84

Handlebars テンプレートを使用しており、JSON データは既に [Object object] で表されています。Handlebars の外部でこのデータを解析するにはどうすればよいですか? たとえば、handlebars タグを使用してページに JavaScript 変数を設定しようとしていますが、うまくいきません。

助言がありますか?ありがとうございました!

編集:

明確にするために、テンプレートにハンドルバー付きのExpressJSを使用しています。私のルートでは、これがあります:

var user = {}
user = {'id' : 123, 'name' : 'First Name'}

res.render('index', {user : user});

次に、index.hbs テンプレートに{{user}}オブジェクトを作成しました。{{#each}}オブジェクトをうまく反復処理するために使用できます。ただし、Backbonejs も使用しており、このデータを次のようなビューに渡したいと考えています。

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

問題は、console.log に入力するとソースに{{user}}表示されるだけ[Object object]で、「予期しない識別子」というエラーが表示されることです。

4

7 に答える 7

180

を出力するとき{{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
});
于 2012-04-19T17:13:10.843 に答える
13

JSONを単純に文字列化できます。

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

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

{{{user.stringify}}};
于 2016-05-06T04:28:36.213 に答える
7

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

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

トリプル カーリーに注意してください ( Jim Liuが指摘したように)。

于 2015-02-13T19:44:24.303 に答える
1

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

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

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

于 2012-04-19T17:08:14.467 に答える
0

Node Router で - 応答オブジェクトを文字列化します。下の行を参照してください。

 response.render("view", {responseObject:JSON.stringify(object)});

HTML スクリプト タグでは、テンプレート リテラル (テンプレート文字列) を使用し、JSON.parse を使用します。

const json= `{{{responseObject}}}`;
const str = JSON.parse(json);

魔法のように働きました!

于 2021-03-11T09:34:56.103 に答える