1

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

未捕获的类型错误:无法调用未定义的方法“ 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});

对此有任何想法

谢谢大家

4

2 回答 2

1

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

于 2012-12-14T15:06:40.000 回答
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);绑定所有方法。

为什么在backbone.js 视图中使用bindAll?

于 2012-12-14T15:07:12.783 回答