0

Google で解決策が見つからないスコーピングの問題があります。コードの簡略化されたバージョンです。

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
			  src="https://code.jquery.com/jquery-2.2.4.min.js"
			  integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
			  crossorigin="anonymous"></script>
    <script
			  src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"
			  integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU="
			  crossorigin="anonymous"></script>
		
  </head>
  <div class="widget_element"></div>
</html>

私が得ているエラーは次のとおりです。

TypeError: this._callback is not a function

ウィジェット環境内でこのタスクを実行するより良い方法はありますか?

ありがとう

4

1 に答える 1

0

ほとんどの問題と同様に、ソリューションは SO に質問を投稿した後にのみ頭をもたげます

明らかself = thisに完全に有効です

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');
  }

});

これが将来誰かに役立つことを願っています

于 2016-10-05T12:13:37.843 に答える