2012-12-19 19 views
7

Bu benim app.js dosyası. Router'ın navigate yöntemine, LandingView sınıfının navigateToLogin yöntemine erişmem gerekiyor. Ancak uygulamadan sonra appRouter tanımlandığı için yönlendiriciyi görünümden tanıyamaz. Bu yüzden yönlendiriciye herhangi bir sınıf veya yöntemden küresel olarak erişmenin bir yolunu bulmalıyım. Bu sorunu nasıl çözebilirim? Eğer küresel erişilebilir olmasını appRouter gerekiyorsaOmurga js içinde dünya çapında yönlendirici nasıl erişilir?

var LandingView = Backbone.View.extend({ 
    tagName: 'div', 
    id: 'landing', 
    className: 'landingpad', 
    events: { 
     'click button#login': 'navigateToLogin', 
    }, 
    render: function(){ 

     (this.$el).append("<button class='button' id='login'>Login</button><br/><br/><br/>"); 
     (this.$el).append("<button class='button' id='new'>New User?</button>"); 

     console.log(this.el); 
     return this; 
    }, 
    navigateToLogin: function(e){ 
     app.navigate("/login", true); 
     return false; 
    }, 
}); 

var appRouter = Backbone.Router.extend({ 

initialize: function(){ 
    $('#content').html(new LandingView().render().el); 
} 
}); 

    app = new appRouter(); 
+0

Lukas'ın cevabı bu soruya verilen cevap olmalıdır. –

cevap

20

, sen sırayla navigate arasında yönlendiricinin uygulanması Backbone.history.navigate çağırır olduğunu göreceksiniz:

// Simple proxy to `Backbone.history` to save a fragment into the history. 
navigate: function(fragment, options) { 
    Backbone.history.navigate(fragment, options); 
} 

Bunun yerine açıkça küresel kapsamını yukarı mucking, Backbone.history.navigate kullanın:

var LandingView = Backbone.View.extend({ 
    ... 
    navigateToLogin: function(e){ 
     Backbone.history.navigate("/login", true); 
     return false; 
    }, 
}); 
+0

Navigasyon problemini çözdüm. Gezinme fonksiyonundaki eğiklikleri ihmal ettim ve işe yaradı :) Ama bilgi için teşekkürler. Her zaman bir sorunu çözmek için birden fazla yol olduğunu öğrenmek için ilginç :) – jaykumarark

+0

+1: Bu harika bir cevap. Çok teşekkürler! –

+0

Bu kabul edilen cevap olmalı. –

7

, bazı genel nesneyi takmanız gerekiyor. Web tarayıcılarında bu, window nesnesidir. Pencerenin aracılığıyla

window.app = new appRouter(); 

Ve erişim it:

window.app.navigate(...); 

kullanma globaller korumak zor koda sebep olabilir. Uygulamanız önemsiz boyutlarda değilse, mediator pattern gibi bazı ayrıştırma mekanizmalarını kullanmayı düşünün. Eğer omurga koduna biraz kazmak ise

+0

Eh, oldukça eğitilebilir ve tamamen eğitim amaçlı küçük bir uygulama yapıyorum. İşe yaradı. Teşekkür :) – jaykumarark

+0

'\t yolları: { \t "": "init" \t "/ login": "loadLogin", \t},' Yönlendiricim benim yönlendirici loadLogin fonksiyonunu tetiklemek için görünmüyor. Yukarıdaki ifadede yanlış bir şey var mı? – jaykumarark

+0

@jaykumarark emin değilseniz, ileri eğik çizgi olmadan rotayı tanımlamayı deneyin. – jevakallio

İlgili konular