骨干体视图不渲染

时间:2013-08-14 18:50:51

标签: javascript backbone.js

我在某个地方犯了一个愚蠢的错误,我不能让基础骨干视图得到渲染。有人可以指出我在这段代码中有什么问题吗?

var view = new Backbone.View({
    el: 'body',
    template: '<p>this is my new template</p>',
    render: function() {
        console.log('rendering myself');
        this.$el.html(this.template);
        return this;
    }
});

view.render();

PS console.log为空。

3 个答案:

答案 0 :(得分:5)

你的语法有点偏,你应该首先定义你的视图然后实例化它。

//define view 
var MyView = Backbone.View.extend({
    el: 'body',
    template: '<p>this is my new template</p>',
    render: function() {
        console.log('rendering myself');
        this.$el.html(this.template);
        return this;
    }
});

//create view instance
var view = new MyView();
view.render();

jsBin

答案 1 :(得分:2)

虽然传统的方法是扩展Backbone.view,并实例化视图的新实例(根据Jack的答案),你可以通过将Backbone.View.extend包装在parens中来获得你想要的东西(实例化一个简单的视图): / p>

var view = new (Backbone.View.extend({
    el: 'body',
    template: '<p>this is my new template</p>',
    render: function() {
        console.log('rendering myself');
        this.$el.html(this.template);
        return this;
    }
}));

view.render();

jsbin

这对于“一次性”视图/路由器/等有用,您不打算多次重新实例化。对于大多数情况,Jack的答案中的方法更具可读性(也是有用的)。

答案 2 :(得分:0)

您必须实际创建该视图。

在渲染之前:function(){}

添加

initialize: function(){
    this.render();
}

当您要加载页面/视图时,请使用此

$(document).ready( function(){
     new view({"el:body});
});

虽然通常应该从Backbone视图扩展视图变量。

所以不是“var view”......它应该是类似的东西 window.myView = Backbone.View.extend({})

请参阅http://backbonejs.org/#View

当视图代表对象时,它更容易管理。