Backbone.js render()。el用法

时间:2012-09-09 15:21:00

标签: javascript jquery backbone.js

我从here的Backbone.js教程中获得了这段代码。代码如下:

(function($){

    var Item = Backbone.Model.extend({
        defaults: {
            part1: 'Hello',
            part2: 'World'
        }
    });

    var ItemList = Backbone.Collection.extend({
        model: Item
    });

    var ItemView = Backbone.View.extend({
        tagName: 'li',

        initialize: function(){
            _.bindAll(this, 'render');
        },

        render: function(){
            $(this.el).html("<span>" + this.model.get('part1') + " " + this.model.get('part2') + "</span>");
            return this;
        }

    });

    var AppView = Backbone.View.extend({
        el: $('body'),

        initialize: function(){
            _.bindAll(this, 'render', 'addItem', 'appendItem');

            this.collection = new ItemList();
            this.collection.bind('add', this.appendItem)
            this.counter = 0;
            this.render();
        },

        events: {
            'click button#add': 'addItem'
        },

        addItem: function(){
            var item = new Item();
            item.set({
                'part2': item.get('part2') + this.counter++
            });
            this.collection.add(item);
        },

        appendItem: function(item){
            var itemView = new ItemView({
                model: item
            });
            $('#list', this.el).append(itemView.render().el);
        },

        render: function(){
            $(this.el).append("<button id='add'>Add Item</button>");
            $(this.el).append("<ul id='list'></ul>")
        },
    });

    var Tasker = new AppView();

})(jQuery);

从上面的代码中我无法理解一件事。在函数appendItem中有这段代码:

itemView.render().el

有人可以解释为什么render()部分使用.el部分进行调用,为什么不只是itemView.render()

感谢您的时间和帮助: - )

1 个答案:

答案 0 :(得分:12)

render()调用返回itemView本身。然后它会询问el实例变量(元素本身),然后将其附加到列表视图中。实质上,列表视图包含单独呈现的项目的所有元素。