2

PHPバックエンド、Backbone.js、Handlebars.jsを使用しています。私のjavascriptはデータを要求し、JSONデータは正常に返されます(json_encode)。

このJSONデータをハンドルバーテンプレートに渡すと、表示されません。JSONオブジェクトの前後にある角かっこがHandlebars.jsによって「嫌われ」ており、表示されていないことに気付きました。以下のコードを見てください。

var ArticleListView = Backbone.View.extend(
{
  el: $('#main'),
  render: function()
  {
    var template = Handlebars.compile($("#articles_hb").html());
    $(this.el).html(template([{"articles":[{"title" : "1"}, {"title" : "2"}]}]));
    return this;    
  }
});

さて、ブラケットを外せば問題なく動作します。どうしたの?そもそもなぜ角かっこがあるのですか?どうすればそれらを取り除くことができますか?

4

2 に答える 2

5

コレクションの出力をループするためにハンドルバーを呼び出すことは完全に合理的です。また、配列は、ビューでのデータ処理にとって悪い設計上の決定ではありません。

ハンドルバーには、ここで説明するように、数値または記号の識別子を処理するための特別な構文があります。したがって、より正しい答えは、ハンドルバーが次のようなテンプレートの配列にアクセスできるということです。

{{people.attributes.[0]}} // akin to people.attributes[0]
{{people.attributes.[1]}} // akin to people.attributes[1]

入力:メール:[{ヘッダー:{件名:["Hello Darling"、 "... another"]}}、... more]

<ul>
  {{#each mails}}
    <li>.
        {{headers.subject.[0]}}
    </li>
  {{/each}}
</ul>
于 2012-09-04T23:06:34.273 に答える
0

ハンドルバーは、コンテキストをテンプレート値の単純なルックアップテーブルとして使用するため、コンテキストのオブジェクトを必要とします。したがって、配列()ではなく、オブジェクト( { ... })をに渡す必要があります。template()[ ... ]

誰かがあなたにあなたが必要とするコンテキストオブジェクトを含む1つの要素配列を与えています。JSONを生成しているPHPを修正して、配列ラッパーなしでJSON化されたオブジェクト(PHP用語では連想配列)を送信するか、クライアントコードの配列を次のように削除します。

$(this.el).html(template(context[0]));

このリテラルコードがある場合:

$(this.el).html(template([{"articles":[{"title" : "1"}, {"title" : "2"}]}]));

JavaScriptファイルで、そのコードを生成しているものを修正する必要があります。バックボーンビューに埋め込まれているようなリテラルデータがある場合は、バックボーンを正しく使用していない可能性があります。テンプレートのデータは、バックボーンモデルからのものである可能性があります。

バックボーンモデルからそのJSONを取得している場合は、JavaScriptオブジェクトを提供toJSONする単一のモデルではなく、コレクション(配列を返す)を呼び出していると思います。toJSON

于 2011-09-08T07:17:35.930 に答える