Pregunta

Estoy usando php-backend, backbone.js y manebars.js. Mis solicitudes de datos de JavaScript, y los datos JSON se devuelven correctamente (JSON_ENCODE).

Cuando doy estos datos JSON a la plantilla de manillares, no se muestra. Me di cuenta de que los soportes cuadrados en el frente y en la parte posterior de mi objeto JSON son 'no me gustan' por manillars.js y no se muestran. Eche un vistazo al código a continuación.

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

Ahora, si saco los soportes, funciona bien. ¿Que esta pasando? ¿Por qué los soportes cuadrados están allí en primer lugar? ¿Cómo me deshago de ellos?

¿Fue útil?

Solución

Bigote daliniano Quiere un objeto para el contexto, ya que utiliza el contexto como una tabla de búsqueda simple para los valores de plantilla. Entonces necesitas pasar un objeto ({ ... }) a template(), no una matriz ([ ... ]).

Alguien te da una matriz de un elemento que contiene el objeto de contexto que necesitas. Firme el PHP que está produciendo el JSON para enviar un objeto Jsonificado (matriz asociativa en términos de PHP) sin el envoltorio de matriz o eliminar la matriz en el código del cliente con algo como esto:

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

Si tiene este código literal:

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

En su archivo JavaScript, entonces tiene lo que está generando ese código y solucionarlo. Si tiene datos literales como ese integrado en su vista troncal, entonces probablemente no esté utilizando la troncal correctamente, los datos para su plantilla probablemente deberían provenir de un modelo de troncal.

Si obtienes ese JSON de un modelo de columna vertebral, entonces supongo que estás llamando toJSON en una colección (que devuelve una matriz) en lugar de un solo modelo donde toJSON debería darle un objeto JavaScript.

Otros consejos

Es perfectamente razonable llamar a los manillares para recorrer la salida de una colección. Además, una matriz no es una mala decisión de diseño para el manejo de datos en las vistas.

Manillars tiene una sintaxis especial para tratar con identificadores numéricos o de símbolos, Como se describe aquí. Por lo tanto, la respuesta más correcta es que los manillar pueden acceder a matrices en plantillas como esta:

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

Entrada: Mails: [{encabezados: {sujeto: ["Hola cariño", "... otro"]}}, ... más

<ul>
  {{#each mails}}
    <li>.
        {{headers.subject.[0]}}
    </li>
  {{/each}}
</ul>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top