2013-01-26 17 views
13

Nella mia app Meteor I router backbone funzionano solo quando l'utente ha effettuato l'accesso (tramite il pacchetto account-base). È strano. Questo router funziona correttamente. La funzione showSaying() non viene chiamata affatto quando l'utente non ha effettuato l'accesso.App Meteor - Il router backbone non viene chiamato

Di seguito è riportato il codice in client.js all'interno della cartella client. Devo fare qualcosa con sessioni o auto-pubblicazione?

AphorismView = Backbone.View.extend({ 
el: "#aphorism-item", 
initialize: function(){ 
    _.bindAll(this, "render"); 
    this.render(); 
}, 
render: function() { 
    this.$el.append("<p style='height:600px; background-color:blue;'>hi</p>"); 
} 
}); 

// Creates a route to view the selected aphorism 
var Aphorism = Backbone.Router.extend({ 
    routes: {  
     "saying/:id": "showSaying" 
    }, 
    showSaying: function (id) { 
     var aphorism_view = new AphorismView(); 
     alert('Saying id ' + id + '.'); 
    } 
}); 

//establishes the router 
appRouter = new Aphorism; 

//Sets up backbone 
Meteor.startup(function() { 
    filepicker.setKey("AerIOvsmAQRGaNdEv0judz"); 
    filepicker.constructWidget(document.getElementById('attachment')); 
    Backbone.history.start({pushState: true}); 
}); 
+0

Sospetto che questo abbia a che fare con la velocità di caricamento/ordine e che quando si effettua l'accesso, il caricamento richieda più tempo, portando ad appRouter pronto in tempo. Prova a inserire la dichiarazione di appRouter in Meteor.startup. – Rahul

+0

provato questo Rahul - non ha funzionato – squeezemylime

+0

Non ho ancora lavorato su Win8 Metro Apps, quindi non so se c'è una console di sviluppo disponibile come in Browser. Se c'è, invoco il 'appRouter = new Aphorism;' prima di 'Backbone.history.start ({pushState: true});' e assegna l'appRoute a una variabile globale per vedere se è inizializzata. – wowpatrick

risposta

1

Il tuo problema non sembra affatto un problema di Backbone.js.

Hai provato a inserire un'istruzione console.log all'interno del callback startup() per verificare che venga effettivamente chiamato in tutti i casi? Se no, allora è tra te e Meteor.

1

hai provato ad aspettare che il DOM sia pronto? es .: $(Backbone.history.start)

1

Provare a estrarre la dichiarazione della cronologia Backbone al di fuori di Meteor.start. Non c'è motivo per essere lì. Inoltre, credo che showSaying verrà chiamato solo se si passa a una route con il parametro id (ad esempio, non è possibile andare a http://app/saying/).

Inoltre, potrebbe essere necessario chiamare manualmente approuter.navigate affinché il router funzioni se si sta tentando di navigare a livello di programmazione. (Non so se lo sei, ma potrebbe essere il problema).

Oltre a ciò, non riesco a trovare alcun problema con questo specifico codice. Il problema potrebbe essere da qualche altra parte, se nulla di ciò che ho suggerito lo risolva.

Per un esempio di implementazione di un router funzionante, è possibile esaminare https://github.com/Benaiah/Athenaeum/blob/master/client/router.coffee (dichiarazione di non responsabilità: proviene da un'app che sto scrivendo) e provare a trovare altre differenze.

Spero che questo aiuti.

+0

Controllerò questi suggerimenti, grazie – squeezemylime