学习Backbone.js -不能转换'this.model'对象

Learning Backbone.js - Cannot convert 'this.model' to object

本文关键字:model 对象 this 转换 Backbone js 不能 学习      更新时间:2023-09-26

我是新手,试图学习Backbone.js,我有这个错误:

不能转换"this"。Model ' to object

我试图建立一个简单的架构为audioplayer,但这个错误让我疯了!不明白为什么会这样,但是浏览器控制台在this.model行显示错误。绑定("重置",这。

ListOfSongsView。

下面是我的代码:

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

我做错了什么?请帮帮我,我的头已经裂开了

initialize: function () {
        $('#block').html(new ListOfSongsView().render().el);
    }

在构造AppRouter时调用。你没有传递ListOfSongsView()的model in参数,所以这个。模型未定义

然后调用视图的初始化:

 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);
        });
    },

。Model是未定义的,所以你不能对它调用bind

相关文章: