Backbone.js render().el用法

Hir*_*esh 10 javascript jquery backbone.js

我从这里获得了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);
Run Code Online (Sandbox Code Playgroud)

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

itemView.render().el
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么render()用该.el部件调用该函数,为什么不itemView.render()呢?

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

Mar*_*ahl 12

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