javascript
  • coffeescript
  • 2012-04-04 107 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

    相關問題