javascript
  • coffeescript
  • 2012-04-04 69 views 4 likes 
    4
    buildIMG = (src, resize) -> 
        html = '<div class="left"><div class="foods_image">' 
        html += '<a onclick="popitup("http://somewhere.com/test" href="javascript:void(0)">' 
        html += ' <img src="'+src+'" '+resize+' />' 
        html += '</a>' 
        html += '</div></div>' 
        html 
    
    popitup = (url) -> 
        newwindow=window.open(url,'name','height=640,width=640') 
        newwindow.focus() if window.focus 
        false 
    

    我目前有一个书签,它将JavaScript代码(上面的那个)插入网站。我写了上面的咖啡脚本,它生成了:删除CoffeeScript匿名函数调用

    (function() { 
        var buildIMG, popitup; 
    
        buildIMG = function(src, resize) { 
        var html, nbsp; 
        html = '<div class="left"><div class="foods_image">'; 
        html += '<a onclick="popitup(\'http://somewhere.com/test\');" href="javascript:void(0)">'; 
        html += ' <img src="' + src + '" ' + resize + ' />'; 
        html += '</a>'; 
        html += '</div></div>'; 
        return html; 
        }; 
        popitup = function(url) { 
        var newwindow; 
        newwindow = window.open(url, 'name', 'height=640,width=640'); 
        return newwindow.focus()(window.focus ? false : void 0); 
        }; 
    }).call(this); 
    

    我剪掉了使用buildIMG的函数。该功能在网站上创建叠加层并显示该叠加层中的所有图像。为每个图像调用buildIMG来创建html。

    问题是onclick="popitup("http://somewhere.com/test"部分不起作用。它是未定义的。

    的溶液我所做的就是删除此将其通过CoffeeScript的产生:

    (function() { 
    
    }).call(this); 
    

    如我删除它被尽快固定。如何在生成的JavaScript中将CoffeeScript放入这些行中?

    +1

    如果您不明白它的功能和原因,请先了解一下。它很漂亮,习惯用法,并且有很好的理由。 – delnan 2012-04-04 10:17:57

    +0

    它把函数放在我从代码中理解的'global namespace'中。 – 2012-04-04 10:27:59

    +0

    然后你就不明白了。整个观点是*不*将任何东西放入全局命名空间。 – delnan 2012-04-04 10:35:22

    回答

    19

    CoffeeScript允许通过--bare选项编译没有此安全包装的JavaScript。

    +2

    抖动也有此选项-b或--bare – 2012-12-21 14:44:39

    5

    虽然此文件为清楚起见内抑制,所有 CoffeeScript的输出被包裹在一个匿名函数:(函数(){ ...})();该安全包装与var关键字的自动生成 相结合,使得非常难于偶然污染全局名称空间。

    它来自CoffeScript网站。 如果你想创建你需要

    root = this 
    localProperty = "111" 
    root.property = localProperty 
    

    一个全球性的方法或变量,然后你会得到在全球范围内的属性。

    +0

    +1很好的答案,我会接受这个,但对我的问题的答案是由@zbynour – 2012-04-04 11:18:38

    +0

    +1回答,这是很有用的,例如,在Rails中,当你不在命令行中编译,也不想为每个咖啡脚本文件禁用它 – 2013-10-02 20:39:20

    相关问题