Coffeescript: Cómo 'Bindear' funciones de callback a un objeto

08 Apr
Published by fernando.villalobos in

Muchas veces al usar objetos dentro de nuestro código CoffeeScript necesitamos hacer una definición de una función de callback, pero al intentar acceder a la variable de instancia this (o @ en el caso de CoffeeScript) resulta que no apunta al objeto en cuestión (uno de los clásicos gotchas). Éste comportamiento es muy común en algunas de las capas de frameworks javascript, como es el caso de las vistas Backbone.

La solución es sólo una cuestión de sintaxis: Sustituir el símbolo de flecha -> por el de 'flecha gorda' =>.

$ ->
  class Basket
    constructor: () ->
      @products = []
 
      // usar => en lugar de ->
      $('.product').click (event) =>
        @add $(event.currentTarget).attr 'id'
 
    add: (product) ->
      @products.push product
      console.log @products
 
  new Basket()

De esta manera, la función de callback es enlazada al objeto, y podemos acceder a la variable @

Fuente: coffeescriptcookbook