2013-02-13 14 views
7

I ma widok z tego wydarzenia:"Uncaught TypeError: Object [object Object] ma metodę 'off'" błąd przy użyciu zdarzenia, gdy przeniósł się do szkieletu 0.9.10

var View = Backbone.View.extend({ 
    el: $('#test'), 
    events: { 
    "change input": "test" 
    }, 
    test: function(e) { 
    console.log("test"); 
    } 
}); 

var view = new View(); 

Przy szkielecie 0.9.9 go działa, ale z kręgosłupem 0.9.10 Mam ten błąd: Uncaught TypeError: Object [object Object] nie ma metody "off". Co muszę zmienić, aby pracować z wydarzeniami na szkielecie 0.9.10?

Używam tego CDN za

http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.10/backbone-min.js

Dzięki

+0

Czy ten błąd jest wywoływany po wywołaniu funkcji .test()? Wygląda na to, że test nie robi nic w odniesieniu do .off(). Czy jest jakiś inny kod, który wywołuje .off()? – DashK

+0

.test() jest wywoływany tylko przy użyciu szkieletu 0.9.9. Błąd pojawia się po załadowaniu strony, zanim wykonam jakąkolwiek interakcję ze stroną. – Camilo

+0

Jeśli błąd występuje przed jakąkolwiek interakcją ze stroną, źródłem problemu jest gdzie indziej. Czy jesteś w stanie podać kod, który zgłasza błąd? (Jeśli spojrzysz na Firebug, powinieneś być w stanie uzyskać numer linii, który zgłasza wyjątek.) – DashK

Odpowiedz

12

Używałem jquery 1.5.2, a metoda została wprowadzona na jquery 1.7.0. Sieć szkieletowa 0.9.9 wymaga, aby el zawierała metodę zwią- zania z siecią, podczas gdy sieć szkieletowa 0.9.10 wymagała, aby el zawierała tę metodę. Metoda unbind istnieje na jquery 1.5.2 i to jest powód, dla którego mój kod działał z szkieletem 0.9.9.

+0

Dziękuję bardzo :) –

+0

@Camilo: Dziękuję bardzo. Bardzo mi pomagam. Przez długi czas zmagałem się z tym problemem. –

1

Spróbuj tego ...

var Test = Backbone.View.extend({ 
    events: { 
    "change input": "test" 
    }, 

    initialize: function() { 
    this.setElement($('#test')); 
    }, 

    test: function(e) { 
    alert("test"); 
    } 
}); 

var test = new Test(); 

Albo, to byłoby jeszcze lepiej ...

var Test = Backbone.View.extend({ 
    events: { 
    "change input": "test" 
    }, 

    test: function(e) { 
    alert("test"); 
    } 
}); 

var test = new Test({ 
    el: $('#test') 
}); 
+0

Żadne z nich nie działało. Debugowałem przy użyciu twojego pierwszego przykładu i znalazłem problem na setElement. Pierwszym parametrem setElement jest element. Kiedy debugowałem, element.unbind istnieje, ale element.off jest niezdefiniowany. Podczas wyszukiwania odkryłem, że metoda unbind została zmieniona na off na szkielecie 0.9.10. Nie rozumiem, dlaczego element nie zawiera nowej metody, ale zawiera starą. – Camilo

+0

Twoje przykłady są prawidłowe. Problem polegał na tym, że używałem starej wersji jquery w moim projekcie. Dzięki za pomoc. – Camilo

Powiązane problemy