2016-06-21 12 views
0

Ich hatte Probleme mit dem Backbone und bat einige Leute um Hilfe, aber bisher kein Glück.Backbone dies ist undefined

ich eine neue Kollektion wie diese in der Sammlung

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

, ich dies tun

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

}); 

Wenn ich diesen Code ausführen, bekomme ich die folgende Fehlermeldung im Browser-Konsole

Uncaught TypeError: Cannot read property 'artist' of undefined 

Also das in + this.artist + ist undefiniert. Ich habe keine Ahnung, was ich falsch mache.

Antwort

2

Diese ist nicht definiert, da die Sammlung nicht instanziiert wird, wenn Sie URL hier festlegen. Ich empfehle die URL-Funktion verwenden, wenn Sie das sein dynamisches haben müssen: http://backbonejs.org/#Collection-url

0

Dies ist, wie ich es

gelöst

I

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

zu

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

(ich brauche um den Künstlernamen aus einem Eingabefeld zu erhalten)

Und geändert

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

}); 

zu

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`; 
    } 
}); 

Dazu verwende ich ES6 des Template Literals