2

私が読んだjQueryチュートリアルのほとんどすべての例では、通常、プラグインの選択に1つの主要なパブリック関数を使用しています。「selecting」プラグインとは、jQueryに拡張された単なる静的関数ではないプラグインを意味します。

例えば:

(function($) {

jQuery.fn.actionList = function(options) {
    var opts = $.extend({}, $.fn.actionList.defaults, options);
    return this.each(function(){
       alert(this);
    });

};

$.fn.actionList.defaults = {
    listHtml: '<div>Set the list html</div>'
};

})(jQuery);

だがしかし:

jQuery.log = function(message) {
  if(window.console) {
     console.debug(message);
  } else {
     alert(message);
  }
};

これはほとんどの場合正常に機能しますが、私がやりたいのは、最初の呼び出しから返されたオブジェクトに対して2番目の関数を呼び出すことができるようにすることです。

var actionBox = $('actionBox').actionList(options);

//Many light-cycles later

actionBox.refreshData(data);

または多分:

$('actionBox').actionList(options);

// laaateerr

$('actionBox').actionList.refreshData(data);

これらの一方または両方は不可能であるか、少なくともお勧めできませんが、jQueryとjavascriptの最も深い側面に取り掛かっているだけです。

誰かがこれを行う方法を説明できますか、それが不可能または推奨されない場合は、なぜですか?そして彼らは代わりに何をしますか?

読んでくれてありがとう!

4

2 に答える 2

2

あなたが何を得ているのかよくわかりませんが、最初の関数から返されたオブジェクトで 2 番目の関数を呼び出すことができます。実際、プラグインから jQuery オブジェクトを返すことを強くお勧めします。 jQuery でコマンドをチェーンできます。

あなたの例を使用して

var actionBox = $('actionBox').actionList(options);

//Many light-cycles later

actionBox.refreshData(data);

.actionList().refreshData(data)コマンドの両方が jQuery オブジェクトを返す限り、問題なく動作します。

$('actionBox').actionList.refreshData(data);

する必要があるだろう

$('actionBox').actionList().refreshData(data);

編集:

jQueryのソースコードを見てみると、

jQuery.fn = jQuery.prototype = { 
    /* 
        Load of 'property' functions of jQuery object... 
    */ 
}

そのため、プロパティー (別名プラグイン) を追加しjQuery.fnて、jQuery オブジェクトのプロトタイプを拡張します。電話すると

$(selector, context);

init jQuery オブジェクトのプロパティ関数を使用して、新しい jQuery オブジェクトが返されます。

jQuery = window.jQuery = window.$ = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context );
},
于 2009-07-01T22:53:32.590 に答える
1

私はあなたにとって非常に役立つかもしれないプラグインを持っていると思います。独自の名前空間として任意のコンストラクター/オブジェクトをjQueryに適用でき、オブジェクトセットを参照するためにjQueryで通常使用するのと同じように「this」を使用できます。this [methodName]を使用すると、オブジェクトなどのメソッドが呼び出されます。

http://code.google.com/p/jquery-plugin-dev/source/browse/trunk/jquery.plugin.js

いくつかのコードサンプルはここにあります:

http://groups.google.com/group/jquery-dev/browse_thread/thread/664cb89b43ccb92c/34f74665423f73c9?lnk=gst&q=structure+plugin+authoring#34f74665423f73c9

ページの半分くらいです。

お役に立てば幸いです。

于 2009-07-01T23:05:26.573 に答える