2012-01-03 18 views
7

Este es mi problema:Obtener objeto padre dentro de devoluciones de llamada jQuery

var greatapp = { 
    start : function(){ 
    $.AJAX({ 
     url : 'foo.com', 
     success : function(data){ 
     greatapp.say(data); 
     } 
    }) 
    }, 

    say : function(s){ 
    console.log(s); 
    } 
} 

Lo que no me gusta de este ejemplo es el hecho de que me repito a mi mismo en la función success definiendo el nombre del objeto en lugar de sólo this que obviamente no funcionará porque está en una función externa .

¿Cómo solo tener el nombre greatapp una vez en un objeto JS?

+0

Ver http://stackoverflow.com/questions/183702/access-parents-parent-from-javascript-object – Ivan

Respuesta

10

un lenguaje Javascript común es para guardar el valor de this en una variable como me o self, y el uso que en la devolución de llamada.

Esto funciona ya que la devolución de llamada tiene acceso a las variables declaradas en el ámbito que encierra, en otras palabras, la devolución de llamada se formará un cierre sobre self

var greatapp = { 
    start : function(){ 
    var self = this; 
    $.AJAX({ 
     url : 'foo.com', 
     success : function(data){ 
     self.say(data); 
     } 
    }) 
    }, 

    say : function(s){ 
    console.log(s); 
    } 
} 
+0

¡Gracias! Funciona :) – Ryan

+0

@Ryan - Mi placer - buena suerte –

Cuestiones relacionadas