2013-04-10 15 views
0

我正在使用requireJS並試圖定義Google地圖模塊。爲什麼我的定義調用不觸發?

我將此代碼添加到HTML代碼段的末尾:

$(document).ready(function() { 
    console.log("ready"); 
    define(['async!http://maps.google.com/maps/api/js?v=3&sensor=false'], 
    function (gmap) { 
    console.log(gmap); 
    }); 
}); 

「準備」控制檯登錄,但define呼叫未被觸發。如果我用require調用替換它,文件正在加載,但我的gmap是未定義的。

問:
爲什麼我define通話不觸發?

回答

1

這是因爲一旦模塊被定義,它就需要被需要。你的代碼更改爲類似這樣的工作:

// gmap.js (for example) 
define(['async!http://maps.google.com/maps/api/js?v=3&sensor=false'], function(gmap) { 
    // Do some stuff 

    return gmap; 
}); 

// main.js 
require(['jquery', 'path/to/gmap'], function($, gmap) { 
    $(function() { 
     console.log(gmap); 
    }); 
}); 

需要注意以下幾點:被定義應該住在單獨的文件

  • 模塊。閱讀this page in the API documentation以瞭解它們的工作方式。
  • 避免在DOM就緒回調中需要模塊,這意味着您必須等待更長的時間才能請求模塊。最好馬上開始請求它們,稍後再檢查DOM準備情況。 RequireJS僅爲此提供a DOM ready plugin
  • 確保你的require jQuery作爲一個模塊(除非你不這樣使用它)。
  • 傳遞一個匿名函數來$()$(document).ready()
+0

感謝您的信息的快捷方式。我有點不情願在「無處不在」中宣佈我的模塊,所以感謝您的再次確認。我只用一個require調用就可以工作,但由於我需要多個頁面的功能,我想將gmap註冊爲一個模塊。無論如何。現在作爲模塊工作,所以感謝您的幫助! – frequent 2013-04-11 07:47:12

相關問題