Domanda

Sto usando php-backend, backbone.js e manubris.js. Le mie richieste JavaScript per i dati e i dati JSON vengono restituiti correttamente (JSON_ENCODE).

Quando fornisco questi dati JSON al modello del manubrio, non viene visualizzato. Mi sono reso conto che le parentesi quadrate davanti e sul retro del mio oggetto JSON sono "antipatiche" dai manubri.js e non sono stati visualizzati. Dai un'occhiata al codice qui sotto.

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

Ora, se tiro fuori le parentesi, funziona bene. Cosa sta succedendo? Perché le staffe quadrate ci sono in primo luogo? Come posso sbarazzarmi di loro?

È stato utile?

Soluzione

Manubrio Vuole un oggetto per il contesto in quanto utilizza il contesto come una semplice tabella di ricerca per i valori dei modelli. Quindi devi passare un oggetto ({ ... }) a template(), non un array ([ ... ]).

Qualcuno ti dà un array di un elemento che contiene l'oggetto di contesto di cui hai bisogno. Offri il PHP che sta producendo il JSON per inviare un oggetto JSonified (array associativo in termini di PHP) senza l'involucro dell'array o spogliare l'array nel codice client con qualcosa del genere:

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

Se hai questo codice letterale:

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

Nel tuo file JavaScript, allora devi quello che sta generando quel codice e risolverlo. Se hai dati letterali come quelli incorporati nella vista spina dorsale, probabilmente non stai usando la spina dorsale correttamente, i dati per il tuo modello dovrebbero probabilmente provenire da un modello di spina dorsale.

Se stai ottenendo quel JSON da un modello di spina dorsale, immagino che tu stia chiamando toJSON su una raccolta (che restituisce un array) piuttosto che un singolo modello in cui toJSON Dovrebbe darti un oggetto JavaScript.

Altri suggerimenti

È perfettamente ragionevole chiamare il manubrio per lottare attraverso l'output di una collezione. Anche un array non è una cattiva decisione di progettazione per la gestione dei dati nelle viste.

Il manubrio ha una sintassi speciale per gestire identificatori numerici o simboli, Come descritto qui. Quindi, la risposta più corretta è che il manubrio può accedere agli array in modelli come questo:

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

Input: Mails: [{Headers: {Oggetto: ["Hello Darling", "... un altro"]}, ... Altro

<ul>
  {{#each mails}}
    <li>.
        {{headers.subject.[0]}}
    </li>
  {{/each}}
</ul>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top