Javascript 无法呈现backbone.js集合视图。获得;未捕获类型错误:无法调用方法';在';“未定义”的定义;在我的初始化函数中

Javascript 无法呈现backbone.js集合视图。获得;未捕获类型错误:无法调用方法';在';“未定义”的定义;在我的初始化函数中,javascript,html,json,backbone.js,Javascript,Html,Json,Backbone.js,我是backbone.js的新手,我很难确定为什么我的观点在coupons.js的第67行没有定义。我发布了一个要点,因为它们是相当长的文件 另外,如果我多次刷新浏览器,最终它工作正常,然后我再次刷新,它会中断,我可以再次刷新,直到它工作,然后再次刷新,直到它中断。痛苦的循环 当您试图对空/未定义的对象调用方法时,会发生此错误。问题在于,为offerList获取数据的调用是异步的,但您正在同步实例化集合视图。也就是说,这在CouponCollectionView的构造函数中: this.coll

我是backbone.js的新手,我很难确定为什么我的观点在coupons.js的第67行没有定义。我发布了一个要点,因为它们是相当长的文件

另外,如果我多次刷新浏览器,最终它工作正常,然后我再次刷新,它会中断,我可以再次刷新,直到它工作,然后再次刷新,直到它中断。痛苦的循环


当您试图对空/未定义的对象调用方法时,会发生此错误。问题在于,为
offerList
获取数据的调用是异步的,但您正在同步实例化集合视图。也就是说,这在
CouponCollectionView
的构造函数中:

this.collection.on('add remove', this.render, this);
在集合仍为null时调用:

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

您可能需要考虑使用<代码> var优惠券=新的CoupCopyOffice()/代码>,并调用<代码>优惠券.FuffChh()/Case>——这样,集合将立即被实例化,并准备好用于您的<代码> 视图中的调用。


设置集合,以便您可以调用
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);
});

当您尝试对空/未定义的对象调用方法时,会发生此错误。问题在于,为
offerList
获取数据的调用是异步的,但您正在同步实例化集合视图。也就是说,这在
CouponCollectionView
的构造函数中:

this.collection.on('add remove', this.render, this);
在集合仍为null时调用:

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

您可能需要考虑使用<代码> var优惠券=新的CoupCopyOffice()/代码>,并调用<代码>优惠券.FuffChh()/Case>——这样,集合将立即被实例化,并准备好用于您的<代码> 视图中的调用。


设置集合,以便您可以调用
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);
});

这只是意味着你的模型不存在。你确定你正确地创建了模型,然后将它们传递给
CouponView
(或另一个视图?)我的意思是我这么认为?我的其他人工作吗?有时它甚至会起作用。这只是意味着你的模型不存在。你确定你正确地创建了模型,然后将它们传递给
CouponView
(或另一个视图?)我的意思是我这么认为?我的其他人工作吗?有时它甚至可以工作。对不起,如果这是非常n00by,但你建议我在哪里添加它?我理解您的意思,但不完全确定如何实现。@ohwutup通常您希望向您的集合中添加一个
reset
侦听器,在其中呈现视图。然后调用
fetch()。我是js新手,对主干网更是新手。在绘制学习曲线时遇到了问题。好吧,这是可行的,但现在我的救赎者系列也出现了同样类型的错误。是否可以为我的收藏添加另一个url,或者我是否需要创建一个新的
主干。收藏
?我更新了我的要点。@ohwutup请记住,如果您愿意,您可以将
url
指定为函数,但我仍然认为最好只创建一个新的
Backbone.Collection
。很抱歉,如果这是n00by,但您建议我在哪里添加它?我理解您的意思,但不完全确定如何实现。@ohwutup通常您希望向您的集合中添加一个
reset
侦听器,在其中呈现视图。然后调用
fetch()。我是js新手,对主干网更是新手。在绘制学习曲线时遇到了问题。好吧,这是可行的,但现在我的救赎者系列也出现了同样类型的错误。是否可以为我的收藏添加另一个url,或者我是否需要创建一个新的
主干。收藏
?我更新了我的要点。@ohwutup请记住,如果您愿意,可以将
url
指定为函数,但我仍然认为最好只创建一个新的
Backbone.Collection