backbone.js未拾取模型上下文

backbone.js未拾取模型上下文,backbone.js,handlebars.js,Backbone.js,Handlebars.js,请参阅以下内容 HTML 我已经创建了一个基本的模式和视图,但是模板没有拾取视图的参数。如果我直接在person模型上设置值,它会找到它们。但如果我通过模式的一个新实例设置它们(或者即使我使用init方法来.set()设置它们),则不会这样做 我做错了什么?为了获得与模板一起使用的对象,您需要调用模型的方法 比如说 PersonView = Backbone.View.extend({ tagName: "div", template: pers

请参阅以下内容

HTML

我已经创建了一个基本的模式和视图,但是模板没有拾取视图的参数。如果我直接在person模型上设置值,它会找到它们。但如果我通过模式的一个新实例设置它们(或者即使我使用init方法来.set()设置它们),则不会这样做


我做错了什么?

为了获得与模板一起使用的对象,您需要调用模型的方法

比如说

PersonView = Backbone.View.extend({
            tagName: "div",
            template:  personTemplate,
            render: function () {
                $(this.el).html(this.template(this.model.toJSON()));
                return this;
            }
        });

如果您在Firebug中检查其中一个模型(或只是将其输出到控制台),您会注意到,与您指定的属性相比,有更多的属性,并且您指定的值实际上包含在属性属性下,调用
toJSON
返回带有模型“值”的对象您指定的。

我想您忘记了模型上的
toJSON()
,请尝试
$(this.el).html(this.template(this.model.toJSON());
就是这样!您能将其记录为答案吗?谢谢!
(function ($) {
       var personTemplate= Handlebars.compile($("#person").html());

       var Person= Backbone.Model.extend({
           title: null,
           firstname : "",
           lastname : ""
        });

        PersonView = Backbone.View.extend({
            tagName: "div",
            template:  personTemplate,
            render: function () {
                $(this.el).html(this.template(this.model));
                return this;
            }
        });

        $(document).ready(function () {
        var AppView = Backbone.View.extend({
            initialize: function () {              
                var passView = new PersonView (
                    { model: new Person({ title: "Mr",
                                          firstname : "John",
                                          lastname : "Smith"})
                    });

                $('#people').append(passView.render().el.outerHTML);
            }
        });

        var App = new AppView();
    });
})(jQuery);
PersonView = Backbone.View.extend({
            tagName: "div",
            template:  personTemplate,
            render: function () {
                $(this.el).html(this.template(this.model.toJSON()));
                return this;
            }
        });