2012-05-10 18 views
1

私はjQueryプラグインは、次の例のように、特定の要素に適用返す少し機能の構築があります。特定のコンテナに関数を適用する方法は?

:私の質問は、私はこのような initiate_shop機能することを使うことができるか、だろう

var initiate_shop = function(shop_navigation, options, callback) { 

    var default_settings = { 
     containerID  : "", 
     first   : false, 
     previous  : false, 
     next   : false, 
     last   : false, 
     startPage  : 1, 
     perPage   : 8, 
     midRange  : 15, 
     startRange  : 1, 
     endRange  : 1, 
     keyBrowse  : true, 
     scrollBrowse : false, 
     pause   : 0, 
     clickStop  : true, 
     delay   : 50, 
     direction  : "auto", 
     animation  : "fadeInUp", 
     fallback  : 400, 
     minHeight  : true, 
     callback  : function(pages, items){ 
      if(typeof callback == 'function') { 
       callback.call(this); 
      } 
     } 
    }; 

    var settings = $.extend(default_settings, options); 

    return $(shop_navigation).jPages(settings); 
}; 

$("shop_navigation").initiate_shop(...); 

代わりに、このようにそれを使用する:どのように私は、コールバックのfuの引数を定義することができ、また

initiate_shop(shop_navigation, ...); 

私の状況では、コールバック関数の引数として2つのオブジェクトがありますか?

答えて

3

jQueryプラグインを作成しようとしているようです。あなたの関数で$.fnオブジェクトを拡張すると、関数内からthisキーワードでコンテナにアクセスできます。

$.fn.initiate_shop = function(options, callback) { 
    ... 
    return this.jPages(settings); 
}; 

あなたはshop_navigationという名前の要素を探している場合を除き、あなたのコール$('shop_navigation')は、有効なセレクタではないことに注意してください。 $('#shop_navigation')と書いていますか?

私が求めている理由は、あなたが同様にうまくそれがthisに渡されている複数の要素をサポートしているに対処するためのプラグイン次第です

$('.shop_navigation').initiate_shop(options, callback); 

を書くかもしれないということです。


あなたはどのようなコンテキストを指定したい場合は、現在.callを使用して、あなたのコールバックを呼び出している方法は、便利である、すなわちthisキーワードは、コールバック関数です。

は、あなたのコールバックはこのようになっていることを考えてみましょう:

var callback = function(pages, items) { 
    console.log(this); 
    console.log(pages); 
    console.log(items); 
}; 

あなたはthisキーワードは、コールバック関数内で何気にしない場合、あなたは、単にもし

callback(pages, items); 

としての機能を呼び出すことができます呼び出しコンテキストを手動で設定する場合は、.callまたは.applyを使用します。あなたはまだ関数に引数を渡すことができます。

// first argument defines calling context 
// all others passed as arguments to function 
callback.call(this, pages, items); 

または

// first argument defines calling context 
// second argument defines entire arguments collection 
callback.apply(this, [pages, items]); 

をお使いの場合には、callback変数がしか機能、または未定義になり、あなたが任意の追加のロジックを追加していない場合

var default_settings = { 
    ... 
    callback: callback 
}; 
+0

ああ、そういうわけで別のプラグインを作るのは唯一の選択肢でしょうか? – Roland

+0

さて、 '$( '#shop_navigation')'はjQueryオブジェクトを返すので、jQueryオブジェクトに 'initiate_shop'という機能を持たせたい場合は、プラグインを作成する方法は効果的です。 –

+0

いいえ'shop_navigation'は実際には' div'ですが、私はこれを 'var shop_navigation = $(window).find( 'shop-navigation')と定義しました。さて、他のオプションがない場合は、jQueryプラグインを作成します。しかし、あなたが気にしないなら、どうすれば私の質問の第二の部分に行くのか教えていただけますか?コールバック関数の引数を持つもの? – Roland

関連する問題