2011-09-08 2 views

risposta

51

Avete percorsi sul controller? Backbone crea solo la cronologia una volta specificata almeno una rotta.

Più:

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

Ho impostato window.router su un router di base prima di chiamare questo. Nuovo a spina dorsale, anche se non potrei comprendere appieno la domanda. – fancy

+0

Ah, l'ho capito, grazie per il comando. – fancy

+1

Cosa hai fatto per farlo funzionare? Sto anche impostando 'window.router' su qualcosa prima di chiamare' Backbone.history.start() ', ma continuo a ricevere un errore. –

1

un messaggio di errore simile ".. non ha un metodo 'start'" si apre se si scrive Backbone.History.start invece di Backbone.history.start (quella corretta è con minuscola h in history).

10

Ho colpito lo stesso errore.

Questo accade quando non si fanno un'istanza del router:

var routerInstance = new blogRouter(); 
+0

In realtà ho un'istanza (http://dpaste.com/06NK3KD) ma non trova la strada per la funzione predefinita. – 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

Per migliorare la qualità del tuo post, ti preghiamo di includere come/perché questo codice risolverà il problema. –

6

Se stai usando CoffeeScript e il router è definita utilizzando la parola chiave class CoffeeScript con un metodo di costruzione, doppio controllo che invochi super nella definizione del costruttore. Questo risolve il problema del fatto che Backbone.history fosse nullo per me.

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

ho affrontato esattamente lo stesso problema per motivo diverso, dopo aver trascorso qualche ora mi sono reso conto che un metodo in mio router "route": function() è la causa del problema, che ho commentato questo metodo in più inutile, la storia .start() ha funzionato come previsto.

+0

Grazie! Mi hai salvato la giornata! –

6

Assicurati di includere jQuery.jsprimaunderscore.js e backbone.js in testa HTML.

0

Anche l'utilizzo di vecchie versioni di jquery potrebbe causare questo