2015-01-29 2 views
0

Можно ли добавить подпроцессор к определенному виду? Допустим, у меня есть приложение Backbone для нескольких автомобилей. Сейчас мой маршрутизатор будет выглядеть следующим образомМагистральный подпроцессор к конкретному виду

carRouter = Backbone.Router.extend({ 
    routes: { 
     '': 'index' 
     'contact' : 'contact' 
     ':car': 'car', 
     ':car/gallery' : 'cargallery', 
     ':car/specs' : 'specs', 
     ':car/infos' : 'infos', 
     'about: 'aboutPage' 
    } 

    car: function(){ 
     // do this 
    }, 
    cargallery: function(){ 
     // do this 
    }, 
    specs: function(){ 
     // do this 
    }, 
    infos: function(){ 
     // do this 
    } 
    ...etc 

}); 

такой подход, очевидно, делает всю страницу рендеринга, который я в принципе хочу, чтобы избежать. Когда я нажимаю «галерея» и «спецификации» туда и обратно, например, вся страница повторно отображается на каждом клике.

Итак, можно сделать что-то вроде:

routes: { 
     'contact' : 'contact' 
     ':car': 'car', 
     'about: 'aboutPage' 
     }, 

    car: function(){ 
     // new router containing 
     // ':car/gallery' : 'cargallery', 
     // ':car/specs' : 'specs', 
     // ':car/infos' : 'infos', 
    }, 
    } 

А затем, на странице Car, я бы 3 вкладки в меню (галерея, данные, информация), которая загрузит модель/сбор конкретного автомобиля без перепрофилирования страницы?

Любая помощь/предложение оценены!

ответ

0

Вы можете выполнить это с помощью событий, базового триггера и специального объекта EventHandler.

События хэширования в вашем Carview:

events : { 
    "click .spec" : "showSpecs", 
    "click .gallery" : "showGallery", 
    "click .info" : "showInfo", 
}, 

//Invoked when you click the show specs tab. 
showSpecs : function(event) { 
//Say that EventBus is your custom event handler 
    event.preventDefault(); 
    MyApp.EventBus.trigger("show:spec",payload); 
}, 
showGallery : function(event) { 
    event.preventDefault(); 
    MyApp.EventBus.trigger("show:gallery",payload); 
} 
.... 

И в MyApp.EventBus:

_.extend(MyApp.EventBus,Backbone.Events); 

MyApp.EventBus.showGallery = function(payload) { 
    // payload is an optional data that you can get from the triggered view 
    // Fetch your models or collection 
    // Instantiate the corresponding view and pass your data(models/collections) to it. 
    // Update the url to reflect the new view so that if you hit refresh you 
    // come to the same tab. 
    MyApp.router.navigate("/your-url",{trigger:false}); 
} 
MyApp.EventBus.on("show:gallery",showGallery); 

добавить также метод в маршрутизаторе, который может обрабатывать обновления вкладок.