Frage

Ich verwende Php-Backend, Backbone.js und Lenker. Meine JavaScript -Anfragen nach Daten und JSON -Daten werden erfolgreich zurückgegeben (JSON_Encode).

Wenn ich diese JSON -Daten an die Lenkervorlage gebe, wird nicht angezeigt. Ich erkannte, dass die quadratischen Klammern vor und auf der Rückseite meines JSON -Objekts von Lenker „nicht gemocht“ wurden und nicht angezeigt werden. Schauen Sie sich den Code unten an.

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;    
  }
});

Wenn ich jetzt die Klammern herausnehme, funktioniert es gut. Was ist los? Warum sind die Quadratklammern überhaupt dort? Wie werde ich sie los?

War es hilfreich?

Lösung

Lenker Ich möchte ein Objekt für den Kontext, da er den Kontext als einfache Suchentabelle für Vorlagenwerte verwendet. Sie müssen also ein Objekt übergeben ({ ... }) zu template(), kein Array ([ ... ]).

Jemand gibt Ihnen ein ein Element -Array, das das Kontextobjekt enthält, das Sie benötigen. Entfernen Sie entweder den PHP, der den JSON produziert, um ein JSONIFIFIDE -Objekt (assoziatives Array in PHP -Begriffen) ohne den Array -Wrapper zu senden oder das Array im Client -Code mit so etwas auszuziehen:

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

Wenn Sie diesen wörtlichen Code haben:

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

In Ihrer JavaScript -Datei müssen Sie diesen Code generieren und beheben. Wenn Sie wörtliche Daten haben, die in Ihre Rückgratansicht eingebettet sind, verwenden Sie wahrscheinlich nicht korrektes Backbone, die Daten für Ihre Vorlage sollten wahrscheinlich von einem Backbone -Modell stammen.

Wenn Sie diesen JSON von einem Backbone -Modell bekommen, würde ich vermuten, dass Sie anrufen toJSON auf einer Sammlung (die ein Array zurückgibt) und nicht ein einzelnes Modell, wo toJSON Sollte Ihnen ein JavaScript -Objekt geben.

Andere Tipps

Es ist vollkommen vernünftig, Lenker anzurufen, um die Ausgabe einer Sammlung durchzuführen. Auch ein Array ist keine schlechte Entwurfsentscheidung für die Datenbearbeitung in Ansichten.

Lenker verfügt über eine spezielle Syntax für den Umgang mit numerischen oder Symbolidentifikatoren. wie hier beschrieben. Die korrektere Antwort ist also, dass Lenker in Vorlagen wie folgt auf Arrays zugreifen können:

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

Eingabe: Mails: [{Headers: {Betreff: ["Hallo Liebling", "... ein anderer"]}}, ... mehr

<ul>
  {{#each mails}}
    <li>.
        {{headers.subject.[0]}}
    </li>
  {{/each}}
</ul>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top