2012-03-21 32 views
11

Bu olasılık var mıdır? Sitemiz bir sayfa değil, application.js içinde sıkıştırılmış tüm js dosyaları, location.path ayrıştırma için omurga yönlendirici kullanabilir miyim?Tam yol için omurga yönlendirici nasıl uygulanır, karma değil

Backbone.history.start(pushState: true)'u deniyorum. Benim için çalışıyor, ama bu doğru mu? Sadece ilk ayrıştırma işlemine ihtiyacım var, karmaşık yollar değil ve Backbone.Router aracılığıyla yönlendiriyor.

+0

Neyi başarmaya çalışıyorsunuz? Bazı örnekleriniz ve zaten denediğin şeyler var mı? – tkone

+0

Örneğin, yolu açtığımda '/ testimonials' bazı işlevleri (yönlendiricide) gerçekleştirmek istiyorum. Tek ihtiyacım olan şey, tüm modüllerim uygulama.js'nin içindedir (raylar uygulaması). Ve bilmek istediğim, ne yapmalıyım ... – ValeriiVasin

cevap

13

Standart bir yönlendirici kullanabilirsiniz. Bunu başlattığınızda ve tarih nesnesini başlattığınızda, kök dizinin temel olarak kullanması gereken şeyi ayarlayabilirsiniz. Bu durumda, kullanmaya istediğiniz gibi görünüyor '/'

var MyRouter = Backbone.Router.extend({ 
    routes: { 
     "application/": "somefunc" 
    } 
} 

var app = new MyRouter(); 
Backbone.history.start({pushState: true, root: '/'}); 
herhangi bir dizin sunucu (böylece omurga, değil raylar üzerinde çağrıldığında Eğer HTML dosyasını sunmak için web sunucusu ayarlamak gerekir

, rotalarınızı idare edecektir).

Son olarak, HTML dosyasında Dom üzerinde çalışan bir işlevi var ve yolu URL'den dışarı çekip navigate'a geçirir.

var path = location.pathname; 
app.navigate(path, {trigger: true}); 
+0

IE ile ilgili bir sorun var ... IE, pushState ve Router'a her zaman "# my-path" yerine "/ my/yol" yerine geçecek .. Düzeltmek mümkün mü? – ValeriiVasin

+1

@InviS No. 'pushState' yalnızca HTML5 History nesnesini destekleyen tarayıcıda çalışır. [Omurga özellikle desteklenmeyen tarayıcılarda karma çözüm [(http://documentcloud.github.com/backbone/#History-start) 'e dönecektir. 'PushState' özelliğini desteklemeyen tarayıcılarda yaşanan sorun, tarayıcının 'location' nesnesini değiştirerek geçerli bir URL verdiğinizde yeni bir istekte bulunacağıdır. – tkone

+0

Ama hiçbir şey pushState gerek yok ... Ben hangi sayfada olduğumu bulmak için kullanıyorum ... Bunu yapmak için herhangi bir yöntem var mı? Router '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'default default default default default default how how how how how how how how how how how how how how how how how how how how how how how how how how how how how how how how how how how how – ValeriiVasin

0

Kendi yönlendiricinizi yazmanız gerekir, ancak neyse ki oldukça kolaydır.

var routes = { 
    "terms": "terms", 
    "privacy": "privacy", 
    "password-reset": "reset" 
}; 

var path = window.location.pathname.replace("/", ""); 
var page = routes[path]; 
if (!page) { 
    page = "404"; 
} 

fantezi eşleştirme herhangi olduğunu Backbone sağlar kuralları gerek yoktu, ama normal olan bu fikri uzatmak için çok zor olmaz: Burada ben sadece üzerinde çalıştığım bir site için yazdım biri ifade. Ya da belki de birileri Backbone'un eşleşen mantığını kullanan ancak hash/pushState yönlendirme işlemini yapmayan küçük bir modül yazabilir.

+0

oldukça basit bir örnek. Genellikle, rotalar çok basit değildir ve böyle bir yol sağlamanız gerekebilir: '/ merhaba/dünya /: post /: date' – ValeriiVasin

-1

Aynı IE sorunu vardı, basit bir sollution var. modernizr'u indirin ve ekleyin.

Sonra yapın:

Backbone.history.start({ pushState: Modernizr.history }); 

Bu hile yapmak gerekir.

+1

Backbone, tarayıcının pushState olup olmadığını otomatik olarak algılar ve pushState yoksa pushhe'lere geri döner desteklenir, bu gereksizdir - sadece push.state öğesini history.start içinde true olarak ayarlayın. –

1

Bu kullanıyorum:

window.location.href.replace(Backbone.history.getFragment(), ''); 

omurga uygulamanın kök mutlak url alır.

İlgili konular