BackboneJs教程问题

时间:2011-09-14 21:06:21

标签: javascript backbone.js

我正在按照我在BackboneJs找到的here找到的教程。

render方法的大约一半时间,他执行以下操作:

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

    initialize: function () { 
        this.collection = new List();

        // Collection event binder
        this.collection.bind('add', this.appendItem); 

        this.counter = 0;
        this.render();
    },

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

        _(this.collection.models).each(function(item){ 
          // in case collection is not empty
            appendItem(item);
        }, this);
    },

    addItem: function () { 
        var item = new Item();

        this.counter++;

        item.set({
            part2: item.get('part2') + " " + this.counter 
        });

        this.collection.add(item);
    },

    appendItem: function (item) {
        $('ul').append('<li>' + item.get('part1') + " " + item.get('part2') + '</li>');
    }

我对下面这一行有几个问题。

_(this.collection.models).each(function(item){ 
   // in case collection is not empty
   appendItem(item);
}, this);

在这种情况下,下划线_做了什么?

为什么这甚至需要?

评论说如果集合不是空的。但是没有那条线就可以了。 bind函数中的initialize覆盖告诉Backbone在集合上触发this.appendItem事件时运行add,或者我通过删除行来确认并确认问题

1 个答案:

答案 0 :(得分:2)

我认为这种方法通常将数组包装在“下划线”辅助类中,以使其能够访问所有的underscore.js辅助方法。在这种情况下,.each方法来自下划线帮助程序类。

但是,就像你说的那样,如果没有它,这应该可行。可能是本教程编写的主干版本(v0.3.3)要求对模型数组的_方法进行迭代。

underscore.js(http://documentcloud.github.com/underscore/)的文档讨论了如何使用_()作为方法调用,而不是在面向对象的mannter中使用库。