2013-08-07 1 views
1

Мое приложение имеет основной вид с некоторыми скрытыми элементами, которые могут быть активированы пользователем. Как обычная боковая панель на мобильных телефонах, которые перемещаются слева. Или тележку, которая показывает детали, когда вы нажимаете на нее.Ember.js: Как создать маршруты, которые выполняют только код

Информация в тех изначально скрытых элементах всегда актуальна, поскольку их контент отображается в главном шаблоне приложения. Поэтому моим маршрутам не нужно было бы создавать DOM.

Переходы основаны на JS. Но теперь я хочу, чтобы эти состояния отображались в URL-адресе, чтобы получить последовательное поведение кнопки.

Как я могу достичь этого с использованием рамки ember?

Update, чтобы сделать его более ясным, что я имею в виду:

моему пониманию запуска маршрутов в уголек имеет в основном две побочные эффекты:

  1. Представляют новое состояние в URL , что позволяет поддерживать поддержку истории браузера.
  2. Рендер шаблонов, которые манипулируют DOM на основе некоторых данных

В моем случае, когда, например, пользователь вводит на свернутую корзине Мне нужно:

  1. представляет новое состояние в URL, обеспечивая постоянную поддержку истории браузера.
  2. Выполнить мой showCart() JS функции (без изменений DOM, не шаблон рендеринга)

Когда теперь пользователь вводит в браузере кнопку назад, closeCart() должны быть выполнены (на основании того, что государство в URL несет информация о том, что тележка открыта).

+0

У меня нет вашего вопроса. Вы хотите получить обзор о том, что такое разумный подход для решения таких проблем? Я путаюсь с названием «Как создавать маршруты, которые выполняют только код». –

+0

@ Márcio Rodrigues Correa Júnior: Я только что обновил вопрос, чтобы сделать мой вопрос более ясным. –

ответ

0

Вы можете использовать activate и deactivate методы из вашего шоу маршрута, чтобы знать, когда вводятся или выхода из своего маршрута:

App.ShowRoute = Ember.Route.extend({ 
    activate: function() { 
     alert('Entering in show'); 
     // here would be your showCart 
    }, 
    deactivate: function() { 
     alert('Exiting from show'); 
     // and here the closeCart 
    } 
}); 

Я создал живой demo здесь, чтобы вы видите эту работу.

+0

Это не сработает нигде в приложении, оно будет работать только с одного маршрута. Если вы попытаетесь получить доступ к этому маршруту из глубоко вложенного маршрута, это разрушит весь вид. – Kingpin2k

1

Проблема в том, где они могут получить доступ к этим слайдам в окнах? Можно ли получить доступ только из одного места на карте маршрутов? Или пользователь может щелкнуть по нему независимо от того, в каком виде они находятся? И если они нажмут на него с разных точек зрения, переместите их обратно на другой маршрут, чтобы выскочить в окно?

Если они могут только щелкнуть по нему одним местом, то вы можете просто добавить код в свой setupController этого конкретного маршрута, чтобы запустить js, чтобы выскочить из окна.

setupController: function(){ 
    Ember.run.scheduleOnce('afterRender', this, function(){ 
    //run some js to slide out the window 
    }); 
} 

Честно говоря, если они могут нажать на кнопку в любом месте и иметь слайд из появляются, я бы не попробовать положить его в URL. Просто мое мнение.

+0

Для получения дополнительной информации см. Мой обновленный quetsion. И причина, по которой мне нужны изменения URL-адресов, заключается в том, что пользователи интуитивно нажимают кнопку «Назад» браузера, чтобы вернуться к предыдущему состоянию (например, «детали корзины закрыты»). –

+0

Прошу прощения, это все еще вне парадигмы. Ваше описание вашей корзины покупок и обновление URL-адреса с ним не будут работать с настройкой ресурсов/маршрута. – Kingpin2k

+0

Возможно, это не основной сценарий, который имели в виду создатели ember. Но это * реальный мир. Поэтому я надеюсь получить некоторые идеи для обходных решений. Говорить, что мои требования «вне парадигмы» не очень полезны. –