2016-10-05 1 views
0

J'ai un problème de cadrage que je ne peux pas trouver une solution dans Google est ici une version simplifiée de mon codequestion Scoping avec jQuery UI Widget usine

jQuery.widget("myNamespace.myPlugin", { 
 

 
    options: {}, 
 

 
    _create: function() { 
 
    $main = this.element; 
 
    }, 
 
    
 
    _init: function() { 
 
    $main.text('ajax running'); 
 
    $.ajax({url:'some/url/path'}) 
 
    .done(function(data) { 
 
     this._callback(data); 
 
    }); 
 
    }, 
 
    
 
    _callback: function() { 
 
    
 
    $main.text('ajax complete'); 
 
    } 
 

 
}); 
 

 
$('.widget_element').myPlugin();
<html> 
 
    <head> 
 
    <script 
 
\t \t \t src="https://code.jquery.com/jquery-2.2.4.min.js" 
 
\t \t \t integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" 
 
\t \t \t crossorigin="anonymous"></script> 
 
    <script 
 
\t \t \t src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" 
 
\t \t \t integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" 
 
\t \t \t crossorigin="anonymous"></script> 
 
\t \t 
 
    </head> 
 
    <div class="widget_element"></div> 
 
</html>

L'erreur que je reçois est:

TypeError: this._callback is not a function

y at-il une meilleure façon d'effectuer cette tâche à l'intérieur du widget environnement?

Merci

+0

J'ai posté ma solution actuelle, mais si vous en connaissez une meilleure, veuillez la poster et je l'accepterai si elle est valide – Tricky

+1

Ce n'est pas un problème spécifique à jquery-ui. Plus de solutions dans http://stackoverflow.com/questions/3630054/how-do-i-pass-the-this-context-to-a-function – blgt

Répondre

0

Comme la plupart des problèmes, une solution d'arrières seulement sa tête après vous poser une question sur le SO

Aparently self = this est parfaitement valable

jQuery.widget("myNamespace.myPlugin", { 
 

 
    options: {}, 
 

 
    _create: function() { 
 
    self = this; 
 
    $main = this.element; 
 
    }, 
 
    
 
    _init: function() { 
 
    $main.text('ajax running'); 
 
    $.ajax({url:'some/url/path'}) 
 
    .done(function(data) { 
 
     self._callback(data); 
 
    }); 
 
    }, 
 
    
 
    _callback: function() { 
 
    
 
    $main.text('ajax complete'); 
 
    } 
 

 
});

I espérons que cela aidera quelqu'un dans le futur