2011-10-30 23 views
8

To naprawdę mnie myli, myślę, że jestem głupi, ale przeszukałem i zrobiłem, co mogłem. Ilekroć deklaruję widok i uruchamiam test BDD jaśminem, zawsze zwraca on "niezdefiniowany nie jest funkcją". Jest to kodWidok kręgosłupa - nie jest zdefiniowany

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'))); 
    }, 
}); 

Tak właśnie ogłosił go:

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

Jest to błąd, gdy uruchomię tego kodu z jaśminu:

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

Nie jestem pewien, co oznacza "deklarowanie widoku, a następnie deklarowanie nowego widoku". Czy tworzysz instancję jednego LocationView, a następnie drugiego LocationView? Pierwszy jest w porządku, ale drugi nie jest? Czy też 'new LocationView ({model: this.location})' działa, ale 'new LocationView();' nie robi? –

+0

@muistooshort: Przepraszam za zły angielski, naprawię to. Oznacza to, że monituje mnie, że LocationView nie jest definiowany za każdym razem, chociaż oświadczyłem to? – nXqd

Odpowiedz

18

Miałem podobny problem, gdy załączałem pliki javascript w niewłaściwej kolejności. Zaimportuj je w ten sposób:

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

Jeśli tak nie jest, opublikuj wiersz, w którym występuje ten wyjątek.

+0

To nie rozwiązuje mojego problemu.Po odtworzeniu mojego projektu za pomocą jaśminu w tej chwili.Ale to wygląda jak najlepsza odpowiedź tutaj.Dziękuję – nXqd

+1

Należy uwzględnić wersję rozwojową szkieletu i zobaczyć dokładnie, gdzie w make funkcja pojawia się błąd, gdy Backbone próbuje utworzyć element HTML dla widoku. http://documentcloud.github.com/backbone/docs/backbone.html#section-117 Wygląda na to, że nie masz dostępnych $ uruchamiasz testy – dira

+0

dziękuję za pomoc, dira :) – nXqd

1

Czy na pewno widoku za definicja jest przed kodem inicjującym? Jeśli znajduje się w osobnym pliku, czy na pewno definicja widoku jest wykonywana w pierwszej kolejności?

+0

kiedy deklaruję nową definicję Modelu i nazywam ją. Działa to dobrze :( – nXqd

Powiązane problemy