¿Qué hace el guión bajo en la columna vertebral y cuándo lo usamos?

Estoy pasando por el proceso de aprendizaje de backbone y no entiendo toda la sintaxis. A continuación, incluyo parte del código en el que he estado trabajando para aprender backbone para poder hacer referencia a él en esta pregunta. Si bien entiendo la mayor parte de cómo funciona la columna vertebral, no entiendo muy bien algunos de los significados detrás de algunas de las marcas en parte del código. La fuente de documentación de BackBone es escasa en el mejor de los casos. Obtengo el 90%, sin embargo, la sintaxis que no entiendo es qué proporciona realmente el guión bajo '_' y cuándo usarlo. Por ejemplo, a continuación hay un código que usa el guión bajo en ".bindAll(.... " Por supuesto que entiendo cuál es el enlace. Solo que no estoy seguro de cuándo usar el guión bajo y qué papel juega la marca. Otro ejemplo es cuando el guión bajo se muestra antes del código '(this.collection.models).each(function(item)...' a continuación. Entiendo que el código está haciendo un bucle, sin embargo, ¿por qué están usando el guión bajo? Gracias por su ayuda .

(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);

preguntado el 29 de junio de 12 a las 20:06

4 Respuestas

El subrayado no es más que un colección de funciones de utilidad/útiles que son eficientes, entre navegadores. Cada función de guión bajo comienza con un carácter de guión bajo _ (de ahí el nombre de subrayado).

(énfasis mío)

El subrayado es un biblioteca de cinturón de utilidad para JavaScript que proporciona muchas de las funcional soporte de programación que esperaría en Prototype.js (o Ruby), pero sin extender ninguno de los objetos JavaScript incorporados. Es la corbata que combina con el esmoquin de jQuery y los tirantes de Backbone.js.

La red troncal también podría haber tenido su propio conjunto de funciones, pero dado que las funciones de utilidad necesarias ya están presentes en el guión bajo, en su lugar, las utiliza la red troncal. En otras palabras, Backbone junto con Underscore le brinda más poder y flexibilidad en las necesidades funcionales/de programación.

Observe que tanto Backbone como Underscore están escritos por el mismo autor.

Leer más en documentos:

http://underscorejs.org/

Respondido el 29 de junio de 12 a las 20:06

Es mejor pensar en el guión bajo como más o menos un espacio de nombres para funciones de utilidad útiles. Simplemente usaron guiones bajos para evitar contaminar el espacio de nombres global.

Para obtener más información que esta, es mejor leer los documentos: guion bajo

En particular, el uso en el que parece estar al tanto está bajo encadenamiento

Respondido el 29 de junio de 12 a las 20:06

Underscore es una biblioteca en sí misma, que Backbone utiliza en su fuente. Su API está completamente contenida en el _ espacio de nombres, un objeto.

Underscore se ocupa principalmente de la extensión de la API nativa de JavaScript a nivel de datos. Es decir, está más interesado en los métodos para, por ejemplo, intersectar matrices, que en la manipulación del DOM (es decir, en lo que se especializa jQuery).

También tiene un sistema de plantillas, algo más que utiliza Backbone.

Respondido el 29 de junio de 12 a las 20:06

Underscore.js es una biblioteca de utilidades de javascript escrita por DocumentCloud, los creadores de Backbone.js.

Está disponible como distribuible fuera de Backbone.js, por lo que tiene su propio espacio de nombres.

Ayuda a los desarrolladores al proporcionar interfaces para varias construcciones de lenguaje funcional que no necesariamente son compatibles de forma nativa con todos los navegadores.

Documentación de subrayado.js

P.ej:

bindAll_.bindAll(object, [*methodNames]) 

Vincula una serie de métodos en el objeto, especificados por methodNames, para que se ejecuten en el contexto de ese objeto cada vez que se invoquen. Muy útil para vincular funciones que se utilizarán como controladores de eventos, que de otro modo se invocarían con un this bastante inútil. Si no se proporcionan nombres de método, todas las propiedades de la función del objeto estarán vinculadas a él.

Respondido el 29 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.