我刚开始学习'Backbone.js',我目前正在关注this视频教程。对于模板,我只是让我的模板像这样简单 -
<script type="text/template" id="songlist_template">
<%_.each(songs, function(song){}); %>
<h1>Loaded</h1>
</script>
我的观点扩展为 -
var SongList=Backbone.View.extend({
el:'.page',
render: function(){
var that=this;
var songs=new Songs();
songs.fetch({
success:function (){
var temp=_.template($("#songlist_template").html());
var html=temp(songs);
that.$el.html(html);
},
error: function (collection, response, options) {
alert("error!! "+response.responseText);
}})
}});
一切都很完美,直到我到达模板部分,其中控制台日志表示 -
Uncaught ReferenceError: songs is not defined is not defined.
根据documentation,我认为我的模板语法没问题,我已经传递了正确的获取的数据。此外,我还定义了变量歌曲。如果有人可以指出我的错误,将会很有帮助。
答案 0 :(得分:0)
修复你的问题将歌曲传递为数组 temp({songs:songs.models})
成功回调你可以添加参数歌曲
success:function (songs){
var temp=_.template($("#songlist_template").html());
var html=temp({songs:songs.models});
that.$el.html(html);
},
http://backbonejs.org/#Collection-fetch
options hash取得成功和错误回调,它们都将作为参数传递(集合,响应,选项)
答案 1 :(得分:0)
来自Underscore template
的文档:
评估模板函数时,传入一个对应于模板自由变量
的属性的数据对象
(强调我的)
@VladuIonut试图 - 正确 - 解释的是你必须传入一个包含你在模板中引用的属性的对象。
如果您的歌曲集合中没有一个名为songs
的属性供该模板使用,则会因此未定义的ReferenceError而失败。
您的模板调用应如下所示:
var html=temp({
"songs": songs
});