我是backbone.js的新手,並且無法識別爲什麼我的視圖在coupons.js的第67行上未定義。我發佈了一個要點,因爲它們很長的文件。另外,如果我刷新瀏覽器一堆,最終它工作得很好,然後我再次刷新,它會中斷,我可以再次刷新,直到它工作,然後再次,直到它中斷。痛苦的週期。無法渲染backbone.js集合視圖。在我的初始化函數中獲取「Uncaught TypeError:無法調用方法」
Gist for coupons.js and offers.js
我是backbone.js的新手,並且無法識別爲什麼我的視圖在coupons.js的第67行上未定義。我發佈了一個要點,因爲它們很長的文件。另外,如果我刷新瀏覽器一堆,最終它工作得很好,然後我再次刷新,它會中斷,我可以再次刷新,直到它工作,然後再次,直到它中斷。痛苦的週期。無法渲染backbone.js集合視圖。在我的初始化函數中獲取「Uncaught TypeError:無法調用方法」
Gist for coupons.js and offers.js
此錯誤,當您嘗試調用一個方法的對象是空/未定義的發生。問題在於,您爲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);
});
對不起,如果這是相當n00by,但你建議我在那裏添加?我明白你的意思,但我不完全確定如何實現這一點。 – ohayon
@ohwutup一般情況下,您希望將「重置」偵聽器添加到呈現視圖的集合中。然後調用'fetch()' - 視圖在數據準備就緒時呈現的方式。 – McGarnagle
謝謝你,我打算試試這個,但我可能會保證有更多的問題。即時消息對於js來說是新的,對於主幹來說更新。在學習曲線方面有困難。 – ohayon
這隻意味着你的模型不存在。你確定你正確地創建模型,然後將它們傳遞給'CouponView'(或另一個視圖?) – PhD
我的意思是我這麼認爲?我的其他工作?甚至有時可以使用_sometimes_。 – ohayon