Вопрос

Я использую php-backend, backbone.js и handlebars.js. Мои запросы на JavaScript на данные, а данные JSON успешно возвращаются (json_encode).

Когда я даю эти данные JSON в шаблон руля, он не отображается. Я понял, что квадратные кронштейны спереди и сзади моего объекта JSON «не любят» на руках. 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(), не массив ([ ... ]).

Кто -то дает вам один массив элементов, который содержит нужный вам объект контекста. Либо исправьте PHP, который производит JSON для отправки объекта JSONIFIED (ассоциативный массив в терминах 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]

Ввод: Mails: [{заголовки: {субъект: ["Привет, дорогая", "... еще"]}}, ... подробнее

<ul>
  {{#each mails}}
    <li>.
        {{headers.subject.[0]}}
    </li>
  {{/each}}
</ul>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top