Pan*_*ood 36 javascript jquery coffeescript
我在coffeescript中编写了一个jquery插件,但我不确定如何使函数包装器部分正确.
我的coffeescript从这开始:
$.fn.extend({
myplugin: ->
@each ->
Run Code Online (Sandbox Code Playgroud)
哪个用函数包装器创建javascript:
(function() {
$.fn.extend({
myplugin: function() {
return this.each(function() {
Run Code Online (Sandbox Code Playgroud)
但我希望像这样传入'$':
(function($) {
$.fn.extend({
Run Code Online (Sandbox Code Playgroud)
类似于我的结局......在coffeescript中没有特别的.
我在javascript中得到这个:
})();
Run Code Online (Sandbox Code Playgroud)
但是想这样:
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
有谁知道如何使用coffeescript编译器实现这一目标?或者在coffeescript中完成这项工作的最佳方法是什么?
jas*_*nas 54
答案是你不需要在CoffeeScript中调用它 - 你的脚本已经安全地包装在一个闭包中,因此不需要jQuery-pass-in-a-parameter-tricks.写吧:
$ = jQuery
Run Code Online (Sandbox Code Playgroud)
...在你的剧本的顶部,你很高兴去.
Tre*_*ham 19
除非您--bare在编译器中使用该标志,否则
$ = jQuery
Run Code Online (Sandbox Code Playgroud)
解决方案最好.如果你是,那么使用new do关键字,你可以写
do ($ = jQuery) ->
# plugin code...
Run Code Online (Sandbox Code Playgroud)
从而创造了所需的范围,同时避免了括号中的混乱.
更新/编辑:是的,根据杰里米的解释:
$ = jQuery
$.fn.myPlugin = () ->
console.log('test fired')
Run Code Online (Sandbox Code Playgroud)
编译为:
(function() {
var $;
$ = jQuery;
$.fn.myPlugin = function() {
return console.log('test fired');
};
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这作为一个jQuery插件工作得很好: $('body').myPlugin();
原版的:
好吧,我想我可能会接近这个,让我知道它是否有帮助.
(($) ->
$.fn.extend =
myplugin: ->
@each: ->
)(jQuery)
Run Code Online (Sandbox Code Playgroud)
渲染成:
(function() {
(function($) {
return $.fn.extend = {
myplugin: function() {},
this.each: function() {}
};
})(jQuery);
}).call(this);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10631 次 |
| 最近记录: |