Mustache.js / Hogan.js с Backbone.js

Я пытаюсь реализовать некоторый код, используя backbone.js
и hogan.js (http://twitter.github.com/hogan.js/)

Hogan.js был разработан на основе набора тестов для усов,
поэтому все, что справедливо для шаблонов,
указанных здесь, также относится и к hogan.js.

Моя проблема заключается в передаче Backbone.Collection в Hogan/Mustache.

Для простого шаблона, подобного этому:

{{name}}

Hogan/Mustache, ожидающий чего-то подобного, отлично работает:

{"name":"How Bizarre","artist":"OMC"}

Однако мой Backbone.Collection:

a)
[{"name":"Как странно","исполнитель":"OMC"}]

Или это:

б) [{"имя":"Как странно","исполнитель":"OMC"}, {"имя":"Сексуальное исцеление","художник":"Марвин Гэй"}]

На демонстрационной странице http://mustache.github.com/#demo я не могу
повторять над любым из a) или b) объектов Backbone.Collection.

Может ли кто-нибудь указать, как я могу это сделать?

var Song = Backbone.Model.extend({
defaults: {
name: "Not specified",
artist: "Not specified"
}
});

var Album = Backbone.Collection.extend({
model: Song
});

var song1 = new Song({ name: "How Bizarre", artist: "OMC" });
var song2 = new Song({ name: "Sexual Healing", artist: "Marvin Gaye" });

var myAlbum = new Album;

myAlbum.add(song1);
myAlbum.add(song2);

Я пытаюсь выполнить рендеринг, передавая мой объект Backbone.Colleciton следующим образом: myAlbum.toJSON()

var template = "{{name}}!";

var template = Hogan.compile(template);

this.el.html(template.render(myAlbum.toJSON()));

Спасибо.


person Rudi Starcevic    schedule 09.01.2012    source источник
comment
Я думаю, что у меня все в порядке. вар материал = {}; stuff.items = myAlbum Это позволяет мне: {{#items}} ‹b›{{name}}‹/b› {{/items}} {items:[ {name:How Bizarre,artist:OMC}, {название:Сексуальное исцеление,исполнитель:Марвин Гэй} ]}   -  person Rudi Starcevic    schedule 09.01.2012


Ответы (3)


Похоже, вы передаете Хогану коллекцию, а не отдельную модель.

Попробуйте это вместо этого:

_.each(myAlbum,function(album) {
    this.el.append(template.render(album.toJSON()));
});
person Nej Kutcharian    schedule 06.07.2012

Я столкнулся с тем же затруднительным положением, используя шаблоны Хогана для коллекции Backbone.

var o = {},
c = Album.toJSON();
o.data = c;
this.$el.html(template.render(o));

и в моем шаблоне я ссылаюсь на {{#data}} {{/data}} для перебора коллекции.

person Michael Benin    schedule 31.07.2012

Я переопределил вызов рендеринга магистрали

Backbone.Marionette.Renderer.render = (template, data) ->
  HoganTemplates[template].render data

Очень хорошо работает с марионеткой. однако возникли проблемы с backbone.forms.

person Dave Robertson    schedule 06.06.2013