2012-02-25 19 views
6

Aşağıdaki yönlendirici vardır: // [...]/# gelen kutusu ve benOmurga Yönlendirici tetiklemiyordur rota

appRouter.navigate('inbox', {trigger: true}); 

gelen kutusu eylem çağırır:

appRouter = Backbone.Router.extend({ 
    routes: { 
    '': 'inbox', 
    'inbox': 'inbox', 
    'discussions_engagement': 'contacts', 
    }, 

    inbox: function(page) { 
    console.log('inbox'); 
    var page = page || 1; 
    engage.app.hydrateInbox(page, engage.app.showInbox); 
    }, 
    .... 
}; 

Ben http olduğumda Neyi başarmak istediğimi ateşlemiyor. Şimdi omurga kaynağına baktım (https://github.com/documentcloud/backbone/blob/master/backbone.js#L1027) ve bunun yapmaya çalıştığım şeyi desteklemediğini görüyorum ama Bunu gerçekleştirmenin bir yolu var mı?

var vent = _.extend({}, Backbone.Events); 

Ardından yönlendirici gelen kutusu rota için bunu:

+1

Sorunuza bir yanıt değil, belki de bir çözüm (sizi doğru şekilde alırsam): (Re-) Sayfanızı/en üst görünümünüzü görüntüleyin, örn. 'AppView.render() '. – SunnyRed

cevap

4

Bunun gibi, engage.app Nesne bir olay yöneticisi yaratacak

vent.trigger('inbox:show', page); 

Ve o olayı işlemek engage.app nesnesi, oradaki kodu işleyicide kullanılan kodun yapılması.

Şimdi, appRouter.navigate numaralı telefonu aramak yerine, aynı olayı tetikleyebilirsiniz. Ayrıca, bu işleyiciden, doğru geçmeden appRouter.navigate('inbox'); numaralı telefonu arayabilirsin. Artık uygulamanızı rotayı zorlamaya çalışmadan istediğiniz duruma getirebilirsiniz.

+0

Yaptığım şey bu; Bazı ekstra kod oluşturmasına rağmen yarı-iyi bir çözüm gibi görünüyor. –

+0

@JasonStonebraker [Bu bağlantı] (http://lostechies.com/derickbailey/2011/08/28/dont-execute-a-backbone-js-route-handler-from-your-code/) bu fikri açıklıyor. Bu desen benim için iyi çalıştı. Yönlendiriciyi, tarayıcı URL değişikliklerine göre yönlendiren tek bir iş ile bırakır. Bu soru, zaten o rotadayken bir rotayı tetiklemeye çalışmaktı. Bu çözüm bir geçici çözüm (IMO) değil, daha iyi bir tasarımdır. –

-1

Diğer bir seçenek söyleyebilirim sadece beklendiği gibi appRouter.navigate('inbox', {trigger: true}); kullanarak çalışır Omurga 0.9.10 itibariyle ... Bildiğim kadarıyla yöntemini

appRouter.inbox(); 
2

aramak.

+0

Omurga kaynağının hala buna sahip olması: 'if (this.fragment === fragment) geri dönüyorsa; yani Gavin'in problemi hala var. Ayrıca, kaynağın bir yorumu vardır: 'Rota nesnesi geri çağrılmasını (genellikle arzu edilmez) yapmak istiyorsanız seçenekler nesnesi' tetikleyici: true 'içerebilir. –

İlgili konular