2012-03-28 17 views
0

私はStack Overflowでいくつかの同様のケースを読んだことがありますが、私のようなケースはまだありません。コールバック関数を受け入れるjQueryプラグインメソッドを作成するにはどうすればよいですか?

(function($) { 
    var methods = { 
     init: function() { 
      ... 
      $(this).myPlugin("close"); 
      $(this).myPlugin("open"); 
     }, 
     open: function() { 
      ... 
     }, 
     close: function() { 
      ... 
     } 
    } 
})(jQuery); 

オープン()とclose()メソッドはjQueryのslideUp()とslideDown()メソッド伴うので、私はその後、close()メソッドを呼び出すことができるようにする必要がありますと:ここに私のjQueryプラグインの要点ですopen()メソッドをコールバックとして呼び出します。しかし、私が試してみるときthis solution私は運がない。

答えて

0

をこのコードを使用することができ、これは動作しません:

(function ($) { 
    "use strict"; 

    var methods = { 
     init: function() { 
      return this.each(function() { 
       $(this).click(function() { 
        $(this).myPlugin("close", function() { 
         $(this).myPlugin("open"); 
        }); 
       }); 
      }); 
     }, 
     open: function() { 
      return this.each(function() { 
       console.log("open was called"); 

       $(this).children(":hidden").slideDown("slow"); 
      }); 
     }, 
     close: function (callback) { 
      return this.each(function() { 
       console.log("close was called"); 

       $(this).children(":visible").slideUp("slow"); 

       callback.call($(window)); 
      }); 
     } 
    }; 
}(jQuery)); 

上記のコードは、jQueryのスライドアニメーションの場合にopenメソッドを呼び出す前に、スクリプトの実行がcloseメソッドが終了するのを待たないことを示しています。応答@Paresh Balarため

(function ($) { 
    "use strict"; 

    var methods = { 
     init: function() { 
      return this.each(function() { 
       $(this).click(function() { 
        $(this).myPlugin("toggle"); 
       }); 
      }); 
     }, 
     toggle: function() { 
      return this.each(function() { 
       var $openBox = $(this).children(":visible"), 
        $closedBox = $(this).children(":hidden"); 

       $openBox.slideUp("fast").promise().done(function() { 
        $closedBox.slideDown("fast"); 
       }); 
      }); 
     } 
    }; 
}(jQuery)); 
2
(function($) { 
var methods = { 
    init: function() { 
     ... 
     $(this).myPlugin("close",function() { 
      $(this).myPlugin("open"); 
     } 
    }, 
    open: function() { 
     ... 
    }, 
    close: function(options, callback) { 

     callback.call($(window)); 
     ... 
    } 
} 
})(jQuery); 

あなたが記録のために。これは、引数として渡された関数(コールバック関数)を呼び出す方法です ...

+0

おかげで、私はエラー 'キャッチされない例外TypeError取得しています:ここで私は最終的にはjQueryの約束の方法を使用して、上の和解解決策だ上undefined'の「と呼ぶ」メソッドを呼び出すことはできません –

+0

このデモを確認してください:http://jsfiddle.net/5QZTs/ –

+0

これは、jQueryのスライドアニメーションを扱っている点を除いて、基本的には正しいです。上記の私の答えを参照してください。 –