与Backbone.js的Mustache.js / Hogan.js

时间:2012-01-09 17:25:25

标签: backbone.js mustache

我正在尝试使用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”}]

或者这个:

b)中     [{“name”:“How howarre”,“artist”:“OMC”},{“name”:“Sexual Healing”,“artist”:“Marvin Gaye”}]

从演示页面http://mustache.github.com/#demo我不能 迭代a)或b)Backbone.Collection obejcts。

任何人都可以指出我能做到这一点吗?

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

谢谢。

3 个答案:

答案 0 :(得分:1)

看起来你正在将一个Collection传递给Hogan而不是一个单独的模型。

请改为尝试:

_.each(myAlbum,function(album) {
    this.el.append(template.render(album.toJSON()));
});

答案 1 :(得分:1)

我遇到了同样的困境,在Backbone集合上使用Hogan模板。

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

在我的模板中,我引用{{#data}} {{/ data}}来迭代整个集合。

答案 2 :(得分:0)

我覆盖了主干渲染调用

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

与牵线木偶很好地配合。遇到了有关backbone.forms的问题。