Как получить доступ к свойствам Backbone Model в шаблоне Handlebar

Если есть модель Backbone с именем Person, которая имеет свойства firstName, lastName. Обычно доступ к нему похож на person.get('firstName') и person.get('lastName').

Как сделать аналогичную вещь в шаблоне Handlebar, где Person был подвергнут контексту.

Ответ 1

Когда вы создаете шаблон Handlebars, вам необходимо передать атрибуты модели. Рекомендуемый способ сделать это - вызвать Model.toJSON, который возвращает копию внутреннего хэша attributes модели.

var template = Handlebars.compile(templateHtml);
var rendered = template({ person: model.toJSON() });

В шаблоне вы можете получить доступ к контексту по имени свойства.

<span>{{person.firstName}} {{person.lastName}}</span>

Ответ 2

На самом деле у меня так много мест с .toJSON, поэтому я разработал модификацию Handlebars для обработки моделей Backbone:

https://gist.github.com/4710958

Он проверит, является ли значение экземпляром Backbone.Model, и если он будет вызывать метод .get().

Backbone.Model должен быть глобальным, чтобы использовать его.

{{ user.address.street }}

Будет проанализирован как:

user.get("adress").street