1

我正在经历学习骨干的过程,并不了解所有的语法。下面我输入了一些我一直在学习的代码,以便我可以在这个问题中引用它。虽然我了解了主干的大部分工作原理,但我不太了解某些代码中一些标记背后的一些含义。BackBone 的文档来源充其量是稀缺的。我得到了其中的 90%,但是我没有得到的语法是下划线 '_' 真正提供了什么以及何时使用它。例如,下面的代码在“.bindAll( ....”处使用下划线。当然我明白绑定是什么。只是不确定何时使用下划线以及标记起什么作用。另一个例子是当下划线出现在 '(this.collection.

(function($){

  var Item = Backbone.Model.extend({
    defaults: {
      part1: 'hello',
      part2: 'world'
    }
  });    
   var List = Backbone.Collection.extend({
    model: Item
  });

  var ListView = Backbone.View.extend({
    el: $('body'),
    events: {
      'click button#add': 'addItem'
    },
    initialize: function(){
      _.bindAll(this, 'render', 'addItem', 'appendItem'); // remember: every function that uses 'this' as the current object should be in here

      this.collection = new List();
      this.collection.bind('add', this.appendItem); // collection event binder

      this.counter = 0;
      //once the object is initialized, render the page.
      this.render();      
    },
    render: function(){
    var self = this;      
      $(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
    self.appendItem(item);
      }, this);
    },
    addItem: function(){
      this.counter++;
      var item = new Item();
      item.set({
    part2: item.get('part2') + this.counter // modify item defaults
      });
      this.collection.add(item); // add item to collection; view is updated via event 'add'
    },
     appendItem: function(item){
      $('ul', this.el).append("<li>"+item.get('part1')+" "+item.get('part2')+"</li>");
    }
  });

  var listView = new ListView();
})(jQuery);
4

4 回答 4

3

下划线只不过是一组实用/有用的功能,它们是高效的、跨浏览器的。下划线的每个功能都以一个下划线字符开头_(因此命名为下划线)。

(强调我的)

Underscore 是一个用于 JavaScript 的实用工具带库,它提供了许多您在 Prototype.js(或 Ruby)中所期望的函数式编程支持,但没有扩展任何内置的 JavaScript 对象。这是与 jQuery 的 tux 和 Backbone.js 的吊带搭配的领带。

主干也可以有自己的一组功能,但由于下划线中已经存在所需的实用功能,它们被主干使用。换句话说,Backbone 与 Underscore 结合为您在编程/功能需求方面提供了更多的功能和灵活性。

请注意,Backbone 和 Underscore 都是由同一作者编写的。

阅读有关文档的更多信息:

http://underscorejs.org/

于 2012-06-29T19:33:32.760 回答
0

最好将下划线视为方便实用功能的命名空间。他们只是使用下划线来避免污染全局命名空间。

有关更多信息,最好阅读文档:下划线

特别是,您似乎掌握的用法正在链接中

于 2012-06-29T19:33:23.467 回答
0

Underscore 本身就是一个库,Backbone 恰好在其源代码中使用了它。它的 API 完全包含在_命名空间中,一个对象。

Underscore 主要关注 JavaScript 原生 API 在数据级别的扩展。也就是说,它对相交数组的方法比对 DOM 操作(即 jQuery 擅长的)更感兴趣。

它还有一个模板系统,这是 Backbone 使用的其他东西。

于 2012-06-29T19:34:28.083 回答
0

Underscore.js是由 DocumentCloud 编写的 javascript 实用程序库,Backbone.js.

它可以作为 Backbone.js 之外的可分发文件使用,这就是它有自己的命名空间的原因。

它通过提供各种功能性语言结构的接口来帮助开发人员,这些功能性语言结构并不一定被所有浏览器本机支持。

Underscore.js 文档

例如:

bindAll_.bindAll(object, [*methodNames]) 

绑定由 methodNames 指定的对象上的许多方法,以便在调用它们时在该对象的上下文中运行。对于将用作事件处理程序的绑定函数非常方便,否则将使用相当无用的 this 来调用它们。如果没有提供 methodNames,则对象的所有函数属性都将绑定到它。

于 2012-06-29T19:36:23.950 回答