36

コーヒー スクリプトで jquery プラグインを作成していますが、関数ラッパー部分を正しく取得する方法がわかりません。

私のcoffeescriptはこれで始まります:

$.fn.extend({
    myplugin: ->
        @each ->

関数ラッパーを使用して JavaScript を作成します。

(function() {
  $.fn.extend({
      myplugin: function() {
          return this.each(function() {

しかし、次のように '$' を渡したい:

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

私が持っている結末についても同様です...特にcoffeescriptには何もありません。
私はjavascriptでこれを取得します:

})();

しかし、これが欲しい:

})(jQuery);

coffeescriptコンパイラでこれを達成する方法を知っている人はいますか? それとも、coffeescript 内でこれを行うための最良の方法は何ですか?

4

8 に答える 8

54

答えは、CoffeeScriptでそのように呼び出す必要がないということです。スクリプトはすでにクロージャに安全にラップされているため、jQuery-passed-in-as-a-parameter-tricksは必要ありません。書くだけ:

$ = jQuery

...スクリプトの上部にあるので、準備は完了です。

于 2010-12-26T15:52:09.267 に答える
19

--bareコンパイラでフラグを使用していない限り、

$ = jQuery

ソリューションが最適です。の場合、 newdoキーワードを使用して、次のように書くことができます

do ($ = jQuery) ->
   # plugin code...

したがって、混乱した括弧を避けながら、目的のスコープを作成します。

于 2010-12-27T01:04:08.230 に答える
6

更新/編集:はい、ジェレミーの説明によると:

$ = jQuery

$.fn.myPlugin = () ->
  console.log('test fired')

コンパイルすると:

(function() {
  var $;
  $ = jQuery;
  $.fn.myPlugin = function() {
    return console.log('test fired');
  };
}).call(this);

これは jQuery プラグインとして問題なく動作します。$('body').myPlugin();

オリジナル:

わかりました、私はこれに近づくかもしれないと思います、それが役立つかどうか教えてください.

(($) ->
  $.fn.extend =
    myplugin: ->
    @each: ->
)(jQuery)

次のようにレンダリングされます。

(function() {
  (function($) {
    return $.fn.extend = {
      myplugin: function() {},
      this.each: function() {}
    };
  })(jQuery);
}).call(this);
于 2010-12-26T15:32:39.857 に答える
3

最も簡単な方法は、$.fnオブジェクトを拡張することです

シンプルな jQuery プラグインは、CoffeeScript で次のように記述できます。

$.extend $.fn,

  disable: ->
    @each ->
      e = $(this)
      e.attr("disabled", "disabled") if e.is("button") or e.is("input")

にコンパイルされます

(function() {
  $.extend($.fn, {
    disable: function() {
      return this.each(function() {
        var e;
        e = $(this);
        if (e.is("button") || e.is("input")) {
          return e.attr("disabled", "disabled");
        }
      });
    }
  });
}).call(this);
于 2011-04-12T16:40:21.107 に答える
2

この投稿は古いですが、役に立ちました。これが私のために働くコーヒースクリプトコードです。

$ -> 
    $('.my-class').hello()

$.fn.hello=-> 
    @each -> 
        $(@).append $ '<div>Hello</div>'

: 変数を宣言する必要はありません$。そのまま使用できます。

于 2013-05-20T11:01:09.813 に答える
2

jQuery Boilerplate の CoffeeScript バージョンを確認する必要があります ~ https://github.com/zenorocha/jquery-boilerplate/blob/master/jquery.boilerplate.coffee

于 2011-10-14T12:22:19.280 に答える
1

クロージャーを自分で追加して、--bareフラグを付けてコンパイルするだけです。

coffee -w -c --bare jquery.plugin.coffee

(($) ->
  # some code here
)(jQuery)
于 2011-12-07T20:00:19.003 に答える
0

シンプルでわかりやすい

cleanFadeInjQuery オブジェクトに独自のメソッド を追加するために必要な作業はこれだけです。チェーン用のオブジェクトも返します。

$.fn.extend
  cleanFadeIn: ->                     # $('.notice').cleanFadeIn
    return $(@).each ->               # returns the objects for easy chaining.
      $(@).slideDown 'slow', ->
        $(@).fadeTo 'slow', 1
于 2014-09-04T16:19:41.267 に答える