2013-02-23 2 views
0

Извинения за возможное плохо сформулированное название. Новое для магистрали.Магистральные маршруты и состояния просмотра

У меня возникли проблемы, обертывая мою голову тем, как бороться с маршрутами, связанными с видами. В основном у меня есть вид (назовем его ListView), который, в зависимости от его viewMode, отображает ItemViews, используя различные шаблоны. Это выглядит примерно так:

var ListView = Backbone.View.extend({ 

    // Cache a bunch of templates here 

    viewMode: 'list', // Default is list 

    render: function() { 

     switch(this.viewMode) { 
      case 'list': 
       // Render ItemView based on list template 
       break; 

      case 'gallery': 
       // Render ItemView based on gallery template 
       break; 

     } 

     // Render all items in list 
     this.collection.each(function(model, index) { 
      new ItemView(); // Maybe pass viewMode as a parameter 
     }); 

    } 

}); 

Моя цель состоит в том, что всякий раз, когда ListView использует «список» viewMode или «галерея», это должно быть отражено в адресной строке, а также ручного ввода или нажав на ссылку, которая ведет к например mysite.com/page.html#items/list или # items/gallery должны показывать те же результаты.

Есть ли способ автоматизировать этот процесс или каким-то другим способом решить его?

+0

Как пользователь добраться до состояния, показывающий список/галерея и эту точку зрения без прохождения через маршрутизатор? – WiredPrairie

+0

В настоящее время представление списка просто отображается в AppView. Я медленно прихожу к выводу, что это может быть нежелательно вообще. – jlowgren

ответ

1

Думайте маршрутизатор будет что-то вроде:

var yourRouter = Backbone.Router.extend({ 

    routes: { 
     "items/list": "showList", 
     "items/gallery": "showGallery" 
    }, 


    showList: function() { 
     listView.viewMode = "list" 
     listView.render(); 
    } 

    showGallery: function() { 
     listView.viewMode = "gallery" 
     listView.render(); 
    } 

}); 

Затем на ваш взгляд события, вы можете вызвать метод navigate маршрутизатора. Это обновит адресную строку.

yourRouter.navigate("items/list")