2011-10-30 17 views
8

Questo mi confonde davvero, penso di essere stupido ma ho cercato e ho fatto tutto ciò che potevo. Ogni volta che dichiaro una vista ed eseguo il test BDD con gelsomino, restituisce sempre "indefinito non è una funzione". Questo è un codicevista backbone - non è definito

window.LocationView = Backbone.View.extend({ 
    initialize: function() { 
     // create new marker first 
     this.marker = new google.maps.Marker({ 
      title: this.model.get('name'), 
      draggable: true, 
      animation: google.maps.Animation.DROP, 
      position: new google.maps.LatLng(this.model.get('lat'), this.model.get('long')), // give the position here 
     }); 

     // bind events 
     this.model.bind('change', this.render, this); 
    }, 
    render: function() { 
     this.marker.setTitle(this.model.get("name")); 
     this.marker.setPosition(new google.maps.LatLng(this.model.get('lat'), this.model.get('long'))); 
    }, 
}); 

Ecco come ho dichiarato che:

this.view = new LocationView({model: this.location}); 
this.view = new LocationView(); 
// neither of these ones work. 

Questo è l'errore quando ho eseguito questo codice con il gelsomino:

TypeError: undefined is not a function 
    at [object Object].make (http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.5.3/backbone-min.js:29:37) 
    at [object Object]._ensureElement (http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.5.3/backbone-min.js:30:270) 
    at [object Object].<anonymous> (http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.5.3/backbone-min.js:28:127) 
    at new <anonymous> (http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.5.3/backbone-min.js:32:136) 
    at [object Object].<anonymous> (http://localhost/gmap_api/public/test/spec/specs.js:62:21) 
    at [object Object].execute (http://localhost/gmap_api/public/test/spec/jasmine/jasmine.js:1001:15) 
    at [object Object].next_ (http://localhost/gmap_api/public/test/spec/jasmine/jasmine.js:1790:31) 
    at [object Object].start (http://localhost/gmap_api/public/test/spec/jasmine/jasmine.js:1743:8) 
    at [object Object].execute (http://localhost/gmap_api/public/test/spec/jasmine/jasmine.js:2070:14) 
    at [object Object].next_ (http://localhost/gmap_api/public/test/spec/jasmine/jasmine.js:1790:31) 
+0

Non sono sicuro di cosa significhi "dichiarare una vista e quindi dichiarare una nuova vista". Stai istanziando un LocationView e poi un secondo LocationView? Il primo va bene, ma il secondo no? Oppure 'il nuovo LocationView ({model: this.location})' funziona ma 'new LocationView();' no? –

+0

@muistooshort: Ci scusiamo per il cattivo inglese, ho risolto il problema. Significa che mi viene richiesto LocationView non è definito ogni volta, anche se l'ho dichiarato ?? – nXqd

risposta

18

Ho avuto un problema simile quando ho incluso i miei file javascript nell'ordine sbagliato. importarli in questo modo:

jQuery.js 
Underscore.js 
Backbone.js 
YourCode.js 

Se questo non è il caso, allora inserire la linea alla quale si verifica questa eccezione.

+0

Questo non risolve il mio problema.Io ricrea il mio progetto utilizzando jasmine al momento.Ma questa sembra la migliore risposta qui.Grazie – nXqd

+1

Dovresti includere la versione di sviluppo di Backbone e vedere esattamente dove sono nella marca funzione ottieni l'errore, quando Backbone tenta di creare un elemento HTML per la tua vista. http://documentcloud.github.com/backbone/docs/backbone.html#section-117 Sembra che tu non abbia $ disponibile quando stai facendo i test – dira

+0

grazie per il tuo aiuto, dira :) – nXqd

1

Sei sicuro del Vista la definizione è prima del codice di inizializzazione? Se si trova in un file separato, sei sicuro che la definizione della vista viene eseguita per prima?

+0

quando dichiaro la definizione di un nuovo modello e la chiamo. Funziona benissimo :( – nXqd