2011-09-08 21 views

Respuesta

51

¿Tiene alguna ruta en el controlador? Backbone solo crea el historial una vez que se especifica al menos una ruta.

Más:

TypeError: Cannot call method 'start' of undefined**

Hmm, for some reason Backbone.history is undefined, and so there is no start method on it. It turns out that Backbone.js creates an instance of Backbone.History (upper case ‘H’) called Backbone.history (lower case ‘h’) once a controller has been created that has at least one route specified on it. This makes sense, as history management is only required if there are routes to respond to.

http://tinnedfruit.com/2011/04/26/testing-backbone-apps-with-jasmine-sinon-3.html

+0

Configuré window.router en un enrutador base antes de llamarlo. Nuevo para la red troncal, así que tal vez no entienda completamente la pregunta. – fancy

+0

Ah, lo descubrí, gracias por el liderazgo. – fancy

+1

¿Qué hiciste para que funcione? También estoy configurando 'window.router' en algo antes de llamar a 'Backbone.history.start()', pero sigo recibiendo un error. –

1

un mensaje de error similar ".. no tiene un método de 'inicio'" hace estallar para arriba si usted escribe Backbone.History.start en lugar de Backbone.history.start (la correcta es con minúsculas en hhistory).

10

Me sale el mismo error.

Esto sucede cuando usted no hace una instancia del router:

var routerInstance = new blogRouter(); 
+0

En realidad tengo una instancia (http://dpaste.com/06NK3KD) pero no está encontrando el camino a la función predeterminada. – tutuca

1
(function($) { 

    var Demo = Backbone.Router.extend({ 
     routes:{ 
      '*actions':'defaultRoute' 
     }, 
     defaultRoute:function(action){ 
      alert('xss'); 
     } 
    }); 

    var demo = new Demo; 
    Backbone.history.start(); 
    //My site http://bbs.w3hacker.com 

})(jQuery); 
+3

Para mejorar la calidad de su publicación, incluya cómo/por qué este código resolverá el problema. –

6

Si está utilizando CoffeeScript y el enrutador se define utilizando la palabra clave class CoffeeScript con un método constructor, doble control que invoca super en la definición del constructor. Esto resolvió el problema de Backbone.history siendo nulo para mí.

class AppRouter extends Backbone.Router 
    constructor: (options) -> 
    super(options) 
    # other initialization code 
2

que se enfrentaron exactamente el mismo problema por diferentes razones, después de pasar par de horas me di cuenta de que un método en mi router "ruta": function() está causando el problema, he hecho un comentario de este método adicional innecesaria, historia .start() funcionó como se esperaba.

+0

Gracias! ¡Salvaste mi día! –

6

asegúrese de incluir jQuery.jsantesunderscore.js y backbone.js en la cabeza HTML.

0

También utilizando versiones antiguas de jQuery podría causar este

Cuestiones relacionadas