Backbone这是未定义的

时间:2016-06-21 12:56:45

标签: javascript backbone.js

我一直遇到骨干问题,并向几个人寻求帮助,但到目前为止还没有运气。

我创建了一个像这样的新集合

let eventsCollection = new BandEvents({artist: 'Muse'});

在收藏中,我这样做

const BandEvents = Collection.extend({
    model: Artist,
    url: 'http://api.bandsintown.com/artists/' + this.artist + '/events.json?api_version=2.0&app_id=SomeID',

});

当我运行此代码时,我在浏览器控制台中收到以下错误

Uncaught TypeError: Cannot read property 'artist' of undefined

所以+ this.artist +中的这个是未定义的。我不知道我做错了什么。

2 个答案:

答案 0 :(得分:2)

未定义,因为在此处设置url时未实例化集合。如果您需要使用url函数,我建议使用它:http://backbonejs.org/#Collection-url

答案 1 :(得分:0)

这就是我解决它的方式

我改变了

let eventsCollection = new BandEvents({artist: 'Muse'});

let eventsCollection = new BandEvents($('#artist-input').val());

(我需要从输入字段中获取艺术家姓名)

并改变了

const BandEvents = Collection.extend({
    model: Artist,
    url: 'http://api.bandsintown.com/artists/' + this.artist + '/events.json?api_version=2.0&app_id=SomeID',

});

const BandEvents = Collection.extend({
    model: Artist,
    initialize: function (artist) {
        this.url = `http://api.bandsintown.com/artists/${artist}/events.json?api_version=2.0&app_id=ShowEvents`;
    }
});

为此我使用ES6的Template Literals