J'essaie d'affecter des données JSON à une propriété d'une instance JS.Class.Affectation de portée entre jQuery.getJSON et une classe JS.Class
var MyClass = new JS.Class({
initialize: function(uuid) {
this.uuid = uuid;
},
write: function() {
$.getJSON(url+"?callback=?", {}, function(data) {
Assign(data);
});
function Assign(data) { this.content = data; };
}
});
var m = new MyClass("uuid_goes_here");
m.write();
Le JSON est reçu de manière asynchrone, ce qui est la raison pour laquelle il y a un appel de fonction dans le rappel $.getJSON
.
Le problème que j'ai maintenant est que le this.content
dans la fonction Assign
n'est pas dans la portée de la méthode d'instance nommée write
. Donc, alors que this.uuid
renvoie correctement, this.content
reste indéfini (comme vous pouvez vous y attendre).
Des idées pour corriger la situation? J'ai essayé d'utiliser une variable globale comme une solution de contournement, mais l'appel asynchrone ne permet pas cela (plus c'est une solution de merde).
Certains points à noter, dans le cas où ils sont importants: Je dois utiliser JSONP, donc "? Callback =?" doit rester, et je voudrais le garder async.
Cela a fonctionné parfaitement, merci! J'avais l'impression que cela aurait à voir avec la liaison, mais la bonne approche m'a échappé. – joecorcoran
Juste comme un addendum: malgré la bonne solution de jcoglan, si je projetais d'écrire une nouvelle méthode d'instance qui utilise this.content, et d'appeler la nouvelle méthode directement après write(), la nature asynchrone de $ .getJSON aussi Je voulais juste que ce soit clair. – joecorcoran
Comment avez-vous réussi à gérer la nature asynchrone des appels ajax, en particulier lorsque vous deviez appeler le contenu d'autres fonctions? – Haroon