我是新手,试图学习Backbone.js,我有这个错误:
无法将'this.model'转换为对象
我正在尝试为audioplayer构建一个简单的架构,但这个错误让我很生气!不明白为什么会发生这种情况,但浏览器控制台会在ListOfSongsView的this.model.bind(“reset”,this.render,this)中显示错误。
这是我的代码:
$(function () {
var Player = Backbone.Model.extend({
defaults:{
//blablabla
}
});
var Playlist = Backbone.Collection.extend({
model: Player
});
var MyPlaylist = new Playlist([
{
//blablabla
}
//here comes more songs
]);
var ListOfSongsView = Backbone.View.extend({
tagName: 'ul',
id: "tracks",
initialize: function () {
this.model.bind("reset", this.render, this);
var self = this;
this.model.bind("add", function (player) {
$(self.el).append(new OneSongView({model:player}).render().el);
});
},
render: function (eventName) {
_.each(this.model.models, function (player) {
$(this.el).append(new OneSongView({model:player}).render().el);
}, this);
return this;
}
});
var OneSongView = Backbone.View.extend({
tagName: "li",
calssName: "clearfix",
template:_.template($('#tpl-one-song').html()),
initialize: function () {
this.model.bind("change", this.render, this);
},
render: function (eventName) {
$(this.el).html(this.template(this.model.toJSON()));
return this;
}
});
var AppRouter = Backbone.Router.extend({
routes:{
"": "list",
"!/": "list"
},
initialize: function () {
$('#block').html(new ListOfSongsView().render().el);
},
list: function () {
this.playlist = new Playlist();
this.ListOfSongsView = new ListOfSongsView({model:this.playlist});
this.playlist = MyPlaylist;
$('#block').html(new ListOfSongsView().render().el);
}
});
var app = new AppRouter();
Backbone.history.start();
});
我做错了什么? 求你帮我,我的头已经破了:(
答案 0 :(得分:0)
initialize: function () {
$('#block').html(new ListOfSongsView().render().el);
}
这就是构建AppRouter的那一刻。 你没有在ListOfSongsView()的参数中传递任何模型,所以this.model是未定义的。
然后调用视图的初始化:
initialize: function () {
this.model.bind("reset", this.render, this);
var self = this;
this.model.bind("add", function (player) {
$(self.el).append(new OneSongView({model:player}).render().el);
});
},
this.model未定义,因此您无法在其上调用bind。