2012-12-10 25 views
0

我是backbone.js的新手,並且無法識別爲什麼我的視圖在coupons.js的第67行上未定義。我發佈了一個要點,因爲它們很長的文件。另外,如果我刷新瀏覽器一堆,最終它工作得很好,然後我再次刷新,它會中斷,我可以再次刷新,直到它工作,然後再次,直到它中斷。痛苦的週期。無法渲染backbone.js集合視圖。在我的初始化函數中獲取「Uncaught TypeError:無法調用方法」

Gist for coupons.js and offers.js

+0

這隻意味着你的模型不存在。你確定你正確地創建模型,然後將它們傳遞給'CouponView'(或另一個視圖?) – PhD

+0

我的意思是我這麼認爲?我的其他工作?甚至有時可以使用_sometimes_。 – ohayon

回答

3

此錯誤,當您嘗試調用一個方法的對象是空/未定義的發生。問題在於,您爲offerList提取數據的調用是異步的,但是您正在同步地實例化集合視圖。也就是說,這CouponCollectionView的構造:

this.collection.on('add remove', this.render, this); 

獲取調用而收集仍然是空:

var coupons = null; 
$.getJSON('http://localhost:3000/api/coupons.json', function(response){ 
    coupons = new CouponCollection(response); 
    app.coupons = coupons; 
}); 

你可能要考慮使用var coupons = new CouponCollection(),並呼籲coupons.fetch() - 這樣,該集合將立即實例化,並準備在視圖中調用您的on


設置的集合,使您可以撥打fetch

var CouponCollection = Backbone.Collection.extend({ 
    model: Coupon, 

    // tell Backbone where to send the "fetch" request 
    url: 'http://localhost:3000/api/coupons.json' 
}); 

立即實例化的集合,它叫fetch

var coupons = new CouponCollection(); 
coupons.fetch(); 

添加reset監聽到集合(當fetch完成時觸發),並在處理程序中呈現視圖:

this.couponCollectionView = new app.CouponCollectionView({collection: this.couponList}); 
var self = this; 
this.couponList.on("reset", function() { 
    $('#content').empty().append(self.couponCollectionView.render().el); 
}); 
+0

對不起,如果這是相當n00by,但你建議我在那裏添加?我明白你的意思,但我不完全確定如何實現這一點。 – ohayon

+0

@ohwutup一般情況下,您希望將「重置」偵聽器添加到呈現視圖的集合中。然後調用'fetch()' - 視圖在數據準備就緒時呈現的方式。 – McGarnagle

+0

謝謝你,我打算試試這個,但我可能會保證有更多的問題。即時消息對於js來說是新的,對於主幹來說更新。在學習曲線方面有困難。 – ohayon

相關問題