0

ページ上の要素内の別のドメインから取得したデータをレンダリングするjQueryプラグインを作成しています。私はjQueryプラグインの典型的なパターンに従います:

$(selector).Plugin(options);

プラグインでは、jQuery.getScript(url、[success])を使用して外部データを取得します。外部データソースを使用すると、メソッドの名前を定義でき、そのメソッドの呼び出し(JSONP)でデータをラップします。

$.getScript("http://www.example.com/data?callback=global_callback", instance_callback);

これにより、効果的に次の結果が得られます。

<script type="text/javascript">
  global_callback(data);
</script>

スコープは、プラグインインスタンスglobal_callbackがデータに対して実行できることを制限します。また、このメソッドには、プラグインがインスタンス化されたセレクターまたはオプションに関する知識がありません。global_callback

私はそれglobal_callbackがデータを保存するだけで、プラグインがでデータを取得するだろうと思っていましたinstance_callback。しかし、それinstance_callbackが正しいデータを取得することを確認する必要があります。プラグインの複数のインスタンスに問題があると予測しています。どうすればこれを処理できますか?

ありがとう!

4

1 に答える 1

1

あなたが何を求めているのか理解できないかもしれません。これらのコールバックは、(必要に応じて) コールバックに名前を付けることができることを除いて、通常の JSON と同様に機能します。AJAX のコンテキスト内で実行されますが、もちろん、別の変数に割り当てない限り、これは使用できません。

このように呼び出しを行った場合、コールバックに名前を付ける必要さえありません。

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data){
  $.each(data.items, function(i,item){
    $("<img/>").attr("src", item.media.m).appendTo("#images")
      .wrap("<a href='" + item.link + "'></a>");
    if ( i == 3 ) return false;
  });
});

参照: http://docs.jquery.com/Release:jQuery_1.2/Ajax#Cross-Domain_getJSON_.28using_JSONP.29

プラグインのインスタンスで実行することに関心がある場合は、この呼び出しをクロージャーでラップします。このようにして、コールバック中にアクセスする必要があるインスタンスを参照できます。

function GetSomeData(){
  var that = this; //reference to the element you are working
  $.getJSON("...",function(data){
    //do some stuff to element with data
    $("element").data("JSONP",data);
  });

}
于 2010-04-06T19:02:06.403 に答える