1

JQuery プラグインのオーサリングに関するドキュメントのデフォルトとオプションのセクションに、次のような設定を含めるとします。

(function( $ ){

  $.fn.tooltip = function( options ) {  

    // Create some defaults, extending them with any options that were provided
    var settings = $.extend( {
      'location'         : 'top',
      'background-color' : 'blue'
    }, options);

    return this.each(function() {        

      // Tooltip plugin code here

    });

  };
})( jQuery );

しかし、さらに下のデータ セクションのように、プラグインのビルド方法が変更され、設定の宣言と初期化の方法が明確ではなくなります。

このように init メソッドでスローされますか? もしそうなら、別のメソッドはどのようにそれらにアクセスしますか?

  var methods = {
    init: function(options) {

      // no idea if this is the right place for settings
      var settings = $.extend({}, $.fn.myPlugin.defaultSettings, options || {});

      return this.each(function() {
       ....
      });
    },
    displaySettings: function() {
      console.log('WTF to do?');
    }
  ...
4

3 に答える 3

0

この記事を見てみましょう: jQuery Plugin Design Patterns

すべての例を含む付属の Github リポジトリもあります。

于 2012-12-18T22:17:11.843 に答える
0

この行はおそらくあなたが探しているものです。メソッドがパラメーターとして渡されたか、オプションを含むオブジェクトとして渡されたかを確認します。

if ( methods[method] ) { //Check if a method was passed
    return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) { // Check if options were passed
    // If Options passed, apply them to the .init method where it accepts arguments. 
    // In the example it doesn't show the init method utilizing the options.
    return methods.init.apply( this, arguments ); 
} else {
    $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
}    

オプションが渡された場合、init メソッドで上記と同じコードを使用します。

var methods = {
    init: function(options) {
        var settings = $.extend( {
            'location'         : 'top',
            'background-color' : 'blue'
        }, options);
...

通常、最初の方法としてプラグインを「初期化」するため、そのためのオプションがあります。通常、'destroy' などのメソッドでオプションを渡すことはありません。

于 2012-12-18T22:20:17.737 に答える