2012-04-18 5 views
1

ボイラープレートjqueryプラグインのこの共通のデザインパターンに従いました。プロトタイプのどこからでもコンストラクタ内の特権メソッドthis.service()を呼び出すのに問題があります。プロトタイプのinitだけでなく、プロトタイプ内部からthis.service()を呼び出すにはどうすればよいですか?jqueryプラグインを使用して特権メソッドを呼び出す方法。ボイラープレートのjqueryデザインパターン

私がしようとしているのは、このプラグインのこのインスタンス内でのみ影響を受け、変更されるこのプラグインの変数にアクセスできるようにすることです。この変数は別の場所に配置する必要がありますか?この変数の名前はvariableToAccessです。たぶん私はこのすべての間違って来ている。ありがとう。

プラグインでは、プラグイン

;(function ($, window, document, undefined) { 
    // Create the defaults once 
    var pluginName = 'defaultPluginName', 
     defaults = { 
     propertyName: "value" 
    }; 

    // The actual plugin constructor 
    function Plugin(element, options) { 
     this.element = element; 
     this.options = $.extend({}, defaults, options) ; 
     this._defaults = defaults; 
     this._name = pluginName; 
     var variableToAccess = false;//<----should this be somewhere else? 
     this.service = function() { 
      variableToAccess = true; 
     }; 
     this.init(); 
    } 

    Plugin.prototype = { 
     init: function() { 
      Plugin.prototype.doSomething(); 
     }, 
     doSomething: function() { 
      this.service()//<----doesn't work 
     } 
    } 

    $.fn["comment"] = function (options) { 
     return this.each(function() { 
      if (!$.data(this, 'plugin_' + pluginName)) { 
       $.data(this, 'plugin_' + pluginName, 
       new Plugin(this, options)); 
      } 
     }); 
    } 

})(jQuery, window, document); 

答えて

0

私はここに正しくない可能性があり、ここで

$('article').comment(); 

を次のように呼ばれて、私はあなたがプラグイン経由でのdoSomething()を呼び出すべきであるとは思いません。 prototype.doSomething()。

this.doSomething();メソッドを呼び出す必要があります。下記をご覧ください:

function Plugin(element, options) { 
    this.element = element; 
    this.options = $.extend({}, defaults, options) ; 
    this._defaults = defaults; 
    this._name = pluginName; 
    var variableToAccess = false; 
    this.service = function() { 
     variableToAccess = true; 
    }; 
    this.init(); 
} 

Plugin.prototype = { 
    init: function() { 
     this.doSomething(); 
    }, 
    doSomething: function() { 
     this.service(); 
    } 
}; 

$.fn.comment = function (options) { 
    return this.each(function() { 
     if (!$.data(this, 'plugin_' + pluginName)) { 
      $.data(this, 'plugin_' + pluginName, 
      new Plugin(this, options)); 
     } 
    }); 
}; 
関連する問題