未捕获的TypeError:无法调用未定义的方法'toJSON'

时间:2012-12-14 15:01:56

标签: jquery backbone.js

我在Backbone.JS中遇到以下错误,

未捕获的TypeError:无法调用未定义的方法' toJSON '。

以下是模型和视图的代码,

 <script src="js/underscore.js"></script>
     <script src="js/jquery-1.6.2.min.js"></script>
    <script src="js/backbone.js"></script>

    var Person = Backbone.Model.extend({
            defaults:{
                name:"niran",
                age:20
            },
            validate:function(attr){
                if(attr.age <0){
                    return "should be greater than 0";
                }
            }
        }
    )

    var PhotoSearch = Backbone.View.extend({
        tagName:"li",
        initialize:function(){
            console.log(this.model)
            this.render();
        },

        template:_.template("<%= name %>(<%= age %>"),

        render:function(){
            this.$el.html(this.template(this.model.toJSON()));
        }
    });
       var p = new Person();
    var ps = new PhotoSearch({model:p});

关于这个的任何想法

全部谢谢

2 个答案:

答案 0 :(得分:1)

根据Backbone.js文档(http://backbonejs.org/),您需要json2.js

答案 1 :(得分:1)

试试这个:

var PhotoSearch = Backbone.View.extend({
        tagName:"li",
        initialize:function(){
            _.bindAll(this, "render");
            console.log(this.model)
            this.render();
        },

        template:_.template("<%= name %>(<%= age %>"),

        render:function(){
            this.$el.html(this.template(this.model.toJSON()));
        }
    });

您错过了对_.bindAll(this, "render");的调用。如果没有此调用,this将不会设置为视图的上下文,这意味着.model将是未定义的。

您还可以使用_.bindAll(this);绑定所有方法。

why do bindAll in backbone.js views?