2010-06-27 5 views
2

Pour une raison quelconque, le code suivant ne se comporte pas comme je l'avais prévu - probablement en raison d'un malentendu de ma part quant à la façon dont il devrait se comporter.Comportement de fermeture incongrue

var contentPane = widget.children("div.content").first(); 

var success = function (content) { 
    return function (data, successCode, httpRequest) { 
     content.innerHTML = data; 
    }; 
}(contentPane); 

Je joins mon débogueur (bien, Firebug de toute façon) et il semble que le « contenu » sur la ligne content.innerHTML = data; est l'objet de la fenêtre, quand je devrais être le résultat de var contentPane = widget.children("div.content").first();, correct?

Notez que si j'ai défini un point d'arrêt avant la fonction, contentPane est en effet défini sur ce à quoi je m'attendrais (un objet jQuery correspondant à div.content). Que se passe-t-il ici, qu'est-ce qui me manque?

Répondre

2

C'est ce que ils ont ajouté $.proxy() dans 1.4 :), comme ceci:

var contentPane = widget.children("div.content").first(); 

var success = $.proxy(function (data, successCode, httpRequest) { 
         this.innerHTML = data; 
       }, contentPane); 

Cela fait juste la déclaration de clôture pour le cas courant comme vous avez beaucoup plus courte, $.proxy(function, whatThisIs).


Pour le "qu'est-ce qui ne va pas?" part ... rien, êtes-vous sûr de vérifier la bonne variable? this fait référence à window l'intérieur de votre fonction, mais content est l'objet jQuery vous voulez ... vous pouvez voir un test rapide ici: http://jsfiddle.net/vhcde/

+0

@downvoter - il est utile de dire * quoi * est incorrect, donc ça aide quelqu'un. –

1

Le problème peut probablement votre sélecteur. Ce qui suit fonctionne bien sur cette page

var contentPane = $("#header")[0]; 

var success = (function (content) { 
    console.info(content); 
    return function (data, successCode, httpRequest) { 
     console.warn(content); 
     content.innerHTML = data; 
    }; 
})(contentPane); 

success("ohai"); 

* J'ai ajouté des parenthèses autour de la définition de la fonction pour plus de clarté.

+0

Alors, à quoi sert le downvote? –