2012-12-18 23 views
2

我目前正在嘗試學習BackboneJS和隨之而來的東西,但我無法真正地將它運行。 我的問題是,儘快嘗試使用Backbone對象時遇到麻煩。所以我試圖記錄他們兩個,給。Backbone&Underscore是未定義的,加載的想法

undefined main.js:23 
undefined main.js:24 

代碼如下。你可以看到,我試圖在我的路由器中使用Backbone對象,但是不成功。然後我嘗試了我的main.js,同樣的事情。

回答

6

您需要使用require shim,因爲Backbone和Underscore不支持AMD開箱即用。

A require shim允許您加載非AMD模塊(請參閱here)。請注意,exports對象是將用作模塊的對象的名稱。

paths: { 
     // Major dependecies. 
     jquery: 'libs/jquery/jquery-1.8.3.min', 
     underscore: 'libs/underscore/underscore-min', 
     backbone: 'libs/backbone/backbone-min', 

     // Template dir. 
     templates: '../templates' 
}, 
shim: { 
    backbone: { 
     deps: ["underscore", "jquery"], 
     exports: "Backbone" 
    }, 

    underscore: { 
     exports: "_" 
    } 
} 

另一種方法是將腳本直接包含在HTML中。

<script src="libs/jquery/jquery.js"></script> 
<script src="libs/underscore/underscore.js"></script> 
<script src="libs/backbone/backbone.js"></script> 
+0

是的,這工作,但你可以詳細說明一下嗎? Shim,AMD。謝謝 – MartinElvar

+0

我已經更新了答案。 – greenimpala

2

我個人認爲它是更容易讓Backbone(和Underscore和jQuery)脫離Require。你可以用正常的方式加載它們(通過一個腳本標籤),然後完成所有你需要的加載,並且一切都將完美運行。你將會有一些全局變量($,_和Backbone),但除此之外,我發現這種方法存在缺點。

或者,您可以浪費大量時間玩墊片,並將Backbone正確地置入Require-land中......但是如果您不必這樣浪費時間,那麼爲什麼還要浪費時間呢?另外,如果你這樣做,你必須在每個文件的定義調用中包含jQuery/Backbone/Underscore,這樣會浪費時間/精力。

+0

我最終也這樣做了,也保存了代碼行。謝謝 – MartinElvar

0

我懷疑這是通過require.js(或主幹網不能很好地滿足要求)引用文件的錯誤。檢查瀏覽器的開發人員工具並確保您實際上正在下載文件。 「控制檯」或「網絡」選項卡應該表明您是否成功獲取文件(HTTP代碼200),或者它沒有找到它們(HTTP代碼404),或者它甚至沒有嘗試(「Net」中沒有行)完全)。

此外,請嘗試將require.js完全移出循環,並使用標準<script>標記直接將文件加載到您的頁面上。這樣你就知道你的文件和變量按預期工作。

相關問題