私はcoffeescriptでjqueryプラグインを書いていますが、関数ラッパー部分を正しく取得する方法がわかりません。
私のコーヒースクリプトはこれで始まります:
$.fn.extend({
myplugin: ->
@each ->
これは、関数ラッパーを使用してJavaScriptを作成します。
(function() {
$.fn.extend({
myplugin: function() {
return this.each(function() {
しかし、私は次のように「$」を渡してほしい:
(function($) {
$.fn.extend({
エンディングについても同様です...特にcoffeescriptには何もありません。
これはJavaScriptで取得します。
})();
しかし、これが欲しい:
})(jQuery);
誰かがcoffeescriptコンパイラでこれを達成する方法を知っていますか?または、これをcoffeescript内で実行するための最良の方法は何ですか?
答えは、CoffeeScriptでそのように呼び出す必要はないということです。スクリプトはすでにクロージャで安全にラップされているため、jQuery-passed-in-as-a-parameter-tricksは必要ありません。書くだけ:
$ = jQuery
...スクリプトの上部にあり、準備は完了です。
コンパイラで--bare
フラグを使用していない限り、
$ = jQuery
解決策が最適です。 areの場合、新しいdo
キーワードを使用すると、次のように記述できます。
do ($ = jQuery) ->
# plugin code...
したがって、括弧の混乱を避けながら、目的のスコープを作成します。
PDATE/EDIT:はい、ジェレミーの説明によると:
_$ = 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);
_
最も簡単な方法は、拡張することです$ .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);
この投稿は古いですが、私はそれが役に立つと思いました。これが私のために働くコーヒースクリプトコードです。
$ ->
$('.my-class').hello()
$.fn.hello=->
@each ->
$(@).append $ '<div>Hello</div>'
注:$
変数を宣言する必要はありません。箱から出してすぐに使用できます。
JQueryボイラープレートのCoffeeScriptバージョンを確認する必要があります〜 https://github.com/zenorocha/jquery-boilerplate/blob/master/jquery.boilerplate.coffee
クロージャーを自分で追加し、--bare
フラグを使用してコンパイルするだけです。
coffee -w -c --bare jquery.plugin.coffee
(($) ->
# some code here
)(jQuery)
JQueryオブジェクトに独自のメソッドcleanFadeIn
を追加するために必要なのは、これだけです。チェーン用のオブジェクトも返します。
$.fn.extend
cleanFadeIn: -> # $('.notice').cleanFadeIn
return $(@).each -> # returns the objects for easy chaining.
$(@).slideDown 'slow', ->
$(@).fadeTo 'slow', 1