0

私は次のようなプラグイン構造を使用しています:

(function( $, window) { 
    $.widget("mobile.multiview",$.mobile.widget, {
        options: {  
           switchable: false,           
           },
        create: function() {
           var self = this;
           // returns false
           console.log(self.options.switchable)
           },
        bindings: function() {
           $(document).on( "pagebeforechange", function( e, data ) {
              var self = this,
                  $link = self.options.switchable;
              // this is undefined, when the event fires - function fails
              console.log( $link )  
              });
           }
        }) 
     }) (jQuery,this);

オプションが未定義になる方法がわかりません。私にはたくさんのオプションがあり、pagebeforechangeイベント内でそれらをコンソールすると、それらはすべて未定義です。

彼らは他のどこでも働いているように見えるので、なぜ彼らがここで失敗しているのか私にはわかりません。私を正しい方向に導くことができるアイデアはありますか?

4

2 に答える 2

1

thisウィジェットではなくドキュメントになります。スコープは異なります。

コードを読み直してください$(document).on(... var self = thiscreateメソッドで、他の場所で使用できる変数に割り当てますthis

ここでコンテキストを維持する方法に関するいくつかの情報:

jqueryで「this」のコンテキストを維持するにはどうすればよいですか?

これを修正するには、自己宣言をクロージャから移動することもできます。

    bindings: function() {
       var self = this;
       $(document).on( "pagebeforechange", function( e, data ) {
          var $link = self.options.switchable;
          console.log( $link ); 
       });
    }
于 2012-04-18T08:57:44.353 に答える
1

すべてのjQueryプラグインに使用するプラグインテンプレートは次のとおりです。

(function($){

$.fn.widget = function(options){
   var opts = $.extend({}, $.fn.widget.defaults, options);

return this.each(function(){
   //get a reference to the DOM element.
   var obj = $(this);
   //because you extended your options into your defaults, you can use them like this
   var isSwitchable = opts.switchable; 
};
};
//private function
function sayHello(name){
   alert(name);
};
//public functions
$.fn.widget.sayHello = function(name){
   alert("hello" + name);
};
//default settings
$.fn.widget.defaults = {
    switchable: false
};
})(jQuery);

opts変数を呼び出すことにより、プラグイン内でオプションを使用できます。

于 2012-04-18T09:06:23.553 に答える