2010-03-29 2 views
2

J'essaie de transformer div # sidebar en une barre latérale dans mon application. Mon code ressemble à celui ci-dessous.

$('#sidebar').userProfile(); 

jQuery.fn.userProfile = function() { 
    $.get('/users/profile', function(data){ $(this).html(data); }); 
}; 

Il n'a pas fonctionné parce que, je trouve les cette (dans la fonction .get $) ici le contexte de la demande get et pas $ ('# encadré). Puis j'ai essayé quelque chose comme ci-dessous.

$('#sidebar').userProfile(); 

#This doesnot work 
jQuery.fn.userProfile = function() { 
    var side_bar = null; 
    $.get('/users/profile', function(data){ side_bar = data; }); 
    $(this).html(side_bar); 
    console.log(side_bar); 
}; 

Cela ne fonctionne pas non plus. Dans la console firebug, je vois Null que je mets en haut quand je déclare la variable.At last je l'ai fait fonctionner en changeant mon code à quelque chose comme ci-dessous en codant en dur le sélecteur.

#This works, but I cannot turn any element to a sidebar which is sick. 
jQuery.fn.userProfile = function() { 
    $.get('/users/profile', function(data){ $('#sidebar').html(data); }); 
}; 

Mais ce n'est pas ce que je voulais parce que je voulais transformer n'importe quel élément en barre latérale. Où vais-je me tromper ou quelle est la bonne façon de le faire?

Répondre

3
$('#sidebar').userProfile(); 

jQuery.fn.userProfile = function() { 
    var elem = this; 
    $.get('/users/profile', function(data){ 
    $(elem).html(data); 
    }); 
}; 

Depuis this change à chaque contexte, il est une technique souvent utilisée pour stocker this dans une autre variable à votre convenance pour saisir le contexte.

Votre deuxième exemple ne fonctionne pas car le rappel .get est exécuté de manière asynchrone à un moment ultérieur indéfini (lorsque les données reviennent).

+0

Merci mon pote, ça a marché. – Deepak

Questions connexes