質問

PHP-Backend、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;    
  }
});

さて、ブラケットを取り出すと、正常に機能します。どうしたの?そもそも四角い括弧があるのはなぜですか?どうすればそれらを取り除くことができますか?

役に立ちましたか?

解決

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

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

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

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

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

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

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

他のヒント

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

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

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

入力:メール:[{headers:{subject:["hello darling"、 "... another"]}}、... more

<ul>
  {{#each mails}}
    <li>.
        {{headers.subject.[0]}}
    </li>
  {{/each}}
</ul>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top