2011-06-12 83 views
2

我組建了一個基本的CRUD系統的一個項目,我們已經決定在Backbone.js的& CoffeeScript中捆綁到抽象我們更多的JavaScript功能。對我來說學習曲線一直非常陡峭,因爲我不是一個JS專業人員。Backbone.js的取()Ajax錯誤

目前,我只是試圖拉記錄。任何記錄。所以我已經通過JSON操縱了一條虛擬路徑來提供一個'產品'記錄集,以便在我前進之前查看它是如何呈現的。

window.Product = Backbone.Model.extend 
    initialize: -> console.log this 
    window.Products = Backbone.Collection.extend 
    model: Product 
    initialize: -> console.log this 
    url: '/dummy' 

所以,在控制檯中,I型:

product = new Product() 

而且這似乎使產品就好了。但是,當我鍵入:

product.fetch() 

它返回:

TypeError: Cannot call method 'ajax' of undefined 

我試圖與收集同樣的事情。

products = new Products() 
products.fetch() 
TypeError: Cannot call method 'ajax' of undefined 

我做了其他部分(圖渲染等)工作得很好,但是這Ajax錯誤是在我反覆得到。我花了幾個小時尋找通過不同的文檔(包括官方的,所有的信息,我可以從維基小道),嘗試在普通的JavaScript代碼以及CoffeeScript中,實現不同範圍(有/無窗命名空間)等等。Google上沒有任何內容。

這一定有什麼可笑的簡單,我也許應該只是知道,但我無法弄清楚了我的生活。或者這是我錯過的文檔中的一個地方。誰能告訴我我做錯了什麼?

回答

8

@Ironchamber:爲了使用骨幹的阿賈克斯方法,你還必須提供,提供跨瀏覽器支持Ajax庫。 Backbone被優化爲使用jQuery或Zepto。它從你的錯誤信息中看到我錯過了其中的一個。

+2

還要注意的是骨幹網需要你*骨幹本身之前,包括jQuery的或的Zepto *。看[註釋的源代碼](http://documentcloud.github.com/backbone/docs/backbone.html):它的第一行之一是'var $ = this.jQuery || this.Zepto;'。所以'jQuery' /'Zepto'必須已經存在,否則當$'ajax'被調用時'$'將會是'undefined'。 – 2011-06-13 16:56:51

+0

謝謝你們,這絕對是它。知道這是一個noob錯誤! – ironchamber 2011-06-14 04:36:14

2

另一種方案是在文件準備調用此:

Backbone.setDomLibrary(jQuery); 

這樣的文件包括順序並不重要。