2

次のように jQuery スクリプトをアクティブにします。

$('#an-id').drawbox();

これは jQuery スクリプトです (重要な部分)。

(function($)
{
$.fn.extend(
{
    drawbox: function()
    {

        // Default options
        var defaults = {
            caption:       'Caption',
            // Canvas properties
            lineWidth:     3,
            lineCap:       'round',
            lineJoin:      'round',
            miterLimit:    10,
            strokeStyle:   'green',
            fillStyle:     'none',
            shadowOffsetX: 0.0,
            shadowOffsetY: 0.0,
            shadowBlur:    0.0,
            shadowColor:   'none',
        }

        options = $.extend(defaults);

        return this.each(function()
        {

            //etc

スクリプトは正常に実行されますが、後で別のスクリプトで「オプション」の値を取得したいと考えています。オプション設定が設定され、関数に保存され、後で取得できると思います。

私は次のようなことを試しました:

$('#an-id').drawbox.options

…が、届かないようです。

4

3 に答える 3

1

見て:

(function($) {
    $.fn.yourPlugin = function(options) {
         options= jQuery.extend({ opt: 1, opt2: 2 }, options);
         // the escope of your plugin....
    }
})(jQuery);

パラメータごとにオプションを取得し、param オプションをプロパティのデフォルトとマージして、デフォルト プロパティをオプション プロパティで上書きするか、オプションが空の場合はデフォルトのままにする必要があります。

于 2013-04-24T21:19:22.183 に答える
1

drawbox は関数であるため、次の行は無効です。

$('#an-id').drawbox.options

呼び出す$('#an-id').drawbox()たびにコードが実行されますが、これは正しくありません。

このようなオプションを返すことができるように、コンストラクター メソッドでパラメーターを使用する必要があります。

$('#an-id').drawbox('options')

アコーディオンの実装を見てください。必要なもののようなものだと思います:

http://api.jqueryui.com/accordion/#method-option

于 2013-04-24T21:20:54.317 に答える
1

メソッドはありますdrawbox()が、現在、内部関数を 1 つだけ実行するように設定しているようです。必要なことを行うには、複数のメソッドを許可するようにプラグインをセットアップする必要があります...

これを行う一般的な方法は、プラグイン コード内のjquery approvedにすべてのメソッドを含めることです。ここで、関数はデフォルトの関数です。methods objectinit

var methods = {
  "getOptions" : function(){ return options; },

  "init" : function(){
    return this.each(function(){
      //your current code goes here (what happens when you call $().drawbox)
    });
  }
}

ここで、プラグインに必要なメソッドを呼び出させるために、次のコードまたは類似のコードを含める必要があります...

  $.fn.drawbox = function(method){
    if(methods[method]){
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
    }else if(!methods[method]){
      return methods.init.apply(this, arguments);
    }else{
      $.error('Method ' +  method + ' does not exist on jQuery.drawbox');
    }      
  };  

これが何をするかに注意してください。.drawbox()が呼び出されると、上記が実行されます。パラメーターが渡されない場合は、関数initが呼び出されます。などのパラメーターが渡されるdrawbox('getOptions')と、getOptions(メソッド オブジェクト内の) メソッドが実行されます。

このようにして、プラグインのスコープ内にある任意の変数を返すことができます。概念は通常の getter/setter と似ています。drawbox : function(){...上記がこれを置き換えるため、現在のコードの行も削除する必要があります。

于 2013-04-24T21:22:30.347 に答える