2011-01-31 699 views
23

¿Cómo hago lo siguiente en CoffeeScript?

$(function() { 
    $('input#username').keyup(function() { 
     var username = $('input#username').val(); 
     url = '/users/check_username/'; 
     params = { username : username }; 
     $.get(url, params, function(response){ markUsername(response); }, "json"); 
    }); 
    }) 

Respuesta

31

Ésta es otra manera ligeramente condensada escribirlo:

$ -> 
    $('input#username').keyup -> 
    username = $(this).val() 
    callback = (response) -> markerUsername response 
    $.get '/users/check_username/', {username}, callback, 'json' 

nota la falta de parens, y la abreviatura "{usuario}" objeto literal.

+2

¡Esta es la buena manera canónica de escribirla en CoffeeScript, de la persona que trajo CoffeeScript! Este ejemplo ilustra una serie de características de CoffeeScript que creo que hacen de CoffeeScript un lenguaje tan agradable para trabajar. – yfeldblum

+0

Gracias por la respuesta y gracias por coffeescript. Creo que mi dificultad para comprender coffeescript es más sobre mi falta de conocimiento de JavaScript. Pero si pudiera hacer una sugerencia, ¿qué le parece explicar en su página de coffeescript las extrañas definiciones de funciones que miran, que comienzan con 'func_name = function (x)'. Sabiendo que desde el principio me habría ahorrado algunos problemas. – Tum

2

Esta es una manera:

$(-> 
    $('input#username').keyup(-> 
     username = $('input#username').val() 
     url = '/users/check_username/' 
     params = {username: username} 
     $.get(url, params, (response)-> 
      markerUsername(response) 
     , "json") 
    ) 
) 

Algunos de estos paréntesis pueden omitirse, pero en mi opinión, ayudan con la comprensión del flujo de código (por lo menos en esta situación).

Recomiendo juguetear con coffeescript aquí http://jashkenas.github.com/coffee-script/ (use el botón "try coffeescript"). El lenguaje es muy fácil de aprender.

+0

muchas gracias. tal vez estoy solo o algo así, pero por mi vida no pude resolver esto incluso después de ver todos los ejemplos que pude encontrar en línea. – Tum

+0

Creo que esto se ve mejor que el aceptado, aunque sé que es solo una preferencia y quien publicó la respuesta ... – Quv

14

Este es el mejor patrón genérico que he encontrado hasta el momento:

$.ajax '/yourUrlHere', 
    data : 
    key : 'value' 
    success : (res, status, xhr) -> 
    error : (xhr, status, err) -> 
    complete : (xhr, status) -> 

Compila a:

$.ajax('/yourUrlHere', { 
    data: { 
    key: 'value' 
    }, 
    success: function(res, status, xhr) {}, 
    error: function(xhr, status, err) {}, 
    complete: function(xhr, status) {} 
}); 
Cuestiones relacionadas