...
$.fn.annotateEdit = function(image, note) {
    if (note) {
        this.note = note;
    } else {
        var newNote = new Object();
        newNote.id = "new";
        this.note = newNote;
    }
}
...
var mynote = this.note;

form.find(':radio').change(function() {
    var vacancy = $(this).attr('value');
    mynote.vacancy = vacancy;
});
...

Es posible acceder a este.nota» desde el cambio() controlador sin definir «mynote»?

  • Gracias por todos los súper rápidas y precisas respuestas. Sólo puedo elegir uno como respuesta, así que voy a ir con el más simple – el «que» del patrón. Pero los otros son definitivamente no es menos valiosa.
InformationsquelleAutor lkraav | 2012-02-05

5 Comentarios

  1. 44

    Yo uso un patrón como este, así que puedo acceder a nada en el ámbito envolvente:

    var that = this;
    ...
    
    form.find(':radio').change(function () {
        that.note.vacancy = $(this).attr('value');
    });

    Yo soy un fan de este patrón, porque lo que hace el código un poco más legible. En mi opinión, es claro lo que se tiene acceso es la parte de la envolvente ámbito de aplicación (siempre y cuando el uso de that es consistente).

    • Han visto este patrón un par de veces antes, pero similar a la de su mynote definición, no?
    • Similares, pero no del todo, var mynote = this.note límites que él sólo mediante la note variable, pero mi método le permite acceder a cualquier cosa en el ámbito de aplicación. Esto hace que el código sea un poco más fácil de leer porque es claro lo que se accede (siempre que sean coherentes con el uso de that).
    • Cierto, sí, supongo que es por eso que veo esto un montón de lugares en el código JS 🙂
  2. 5

    Uso $.proxy para enlazar a una función…

       //Returns a function-------v
    form.find(':radio').change( $.proxy(function() {
    
        var vacancy = $(this).attr('value');
        mynote.vacancy = vacancy;
    
    }, this) );
    //  ^---- ...that has its "this" value set as this argument.
    • Veo usando $.proxy como una solución más elegante, pero quisiera entender: es esta la mejor solución de la que ha sido aceptada como una respuesta o no? ¿cuál es la diferencia?
  3. 3

    No hay ningún idioma dedicado mecanismo para ello. El patrón común es almacenar la this en local (cierre) variable (a menudo llamado self o that) de la parte externa de la función:

    var self = this;
    var innerFunction = function() {
        self.x = 1;
    };
  4. 1

    Puede enlazar el contexto del objeto primario como así.

    form.find(':radio').change(function(that) {
        var vacancy = $(this).attr('value');
        that.note.vacancy = vacancy;
    }.bind(null,this));

Dejar respuesta

Please enter your comment!
Please enter your name here