2016-02-16 3 views
-4

У меня есть следующий сценарий;Требуется ли Ember для генерации маршрута для каждого экрана

Существует несколько рабочих процессов. Возьмите Workflow1 Это 3-ступенчатый рабочий процесс с пользовательским вводом формой на шаге 1. Таким образом, я создал маршрут для этого/Workflow1/step1

В настоящее время на этой step1 форме, у меня есть поле (значение подстановки) & кнопки рядом с ним, по щелчку которого мне нужно показать новый экран (это полностью заменит экран step1). На этом экране снова появляется форма (вид фильтра), и пользователь может фильтровать на основе этой формы поиска и выбирать любые данные.

Выбранные данные пользователя будут заполнять значение в поле поиска «stepup».

Нет моих вопросов, каков наилучший способ реализовать этот экран поиска.

  1. Должен ли я создать новый маршрут (скажем/искать), то есть на уровне корня и реализовать его?
  2. Этот экран поиска будет вызван из нескольких мест (скажем, из workflow2, workflow3), и его поведение будет одинаковым во всех случаях. Единственным отличием является то, что выбранное значение переходит к шагу 1 рабочего процесса вызова. (т. е. это может быть/workflow1/step1 OR/workflow2/step1)
  3. Есть ли какой-либо способ в Ember, с помощью которого я могу реализовать такие экраны, не обязательно генерировать для него отдельный маршрут?

ответ

-1

Для меня ваш сценарий выглядит nested routes.

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

1.Создайте маршрут на корневом уровне, который будет вашим маршрутом рабочего процесса.

Router.map(function() { 
    this.route('workflow', { path: '/workflow' }); 
}); 

На этом вы можете поместить свой шаблон для шага 1.

2.Создайте вложенный маршрут для поиска, который будет вложен внутри workflow.

Router.map(function() { 
    this.route('workflow', { path: '/workflow' }, function(){ 
     this.route('lookup',{ path: '/lookup' }); 
    }); 
    }); 

, если вы хотите иметь рабочие процессы, как w1, w2 и w3, то вы можете создать маршруты для них и использовать rendertemplate функцию для отображения во всех же lookout.

App.w1Route = Ember.Route.extend({ 
    renderTemplate: function() { 
    this.render('lookout'); 
    } 
}); 

Аналогичным образом вы можете создавать другие два рабочих процесса с одним и тем же шаблоном.

+0

2 вопроса; 1. поиск является обычным явлением, но вызывается из разных мест/рабочих потоков. Так может ли этот handle/workflow1/lookup,/workflow2/lookup,/workflow3/lookup и т. Д. 2. Создает ли новый маршрут единственный способ обработки нового экрана поиска? – testndtv

+0

ans 1: мы можем получить доступ к вложенным маршрутам из любого места. ans2: поскольку мы можем получить доступ к вложенным маршрутам из любого места, поэтому не нужно создавать для него отдельный маршрут. –

+0

В вашем примере вы используете вложенные маршруты, но для этого также потребуется использование динамических сегментов. так что вы можете показать пример с несколькими рабочими процессами (w1, w2, w3), и каждый из них имеет общий поиск под ними. – testndtv

0

Вы можете создать маршрут по этому пути, но для меня это больше похоже на форму modal. Я бы создал компонент lookup, а затем использовал логическое значение для переключения видимости этого компонента. Полноразмерный белый фон, чтобы покрыть все остальное. просто.

Просто помните, что остальная часть DOM по-прежнему отображается.

Вы по-прежнему можете создать маршрут, если хотите изменить URL-адрес. Также определенно не плохое решение!

Вы также можете создать компонентный маршрут, используя имя компонента в качестве динамического сегмента и вызвать компонент с помощью помощника component. Так много вариантов!

+0

Спасибо за все варианты! Пара вопросов; 1. Поскольку step1 является формой ввода пользователем, если я использую новый маршрут и перехожу к нему, а затем возвращаюсь, как я могу сохранить ранее введенные пользователем значения в шаге 1 2. Для 3-го решения, как использовать имя компонента как динамический сегмент? Любые примеры, если бы вы могли перечислить это было бы действительно здорово. – testndtv

+0

Ну, 1: Используйте модель для сохранения ваших данных. Поскольку вы используете привязку пользователя к пользователю, вам просто нужно сохранить модель. Помните: контроллеры являются одиночными и могут удерживать состояние! Или дайте модель вперед и назад. 2: Используйте помощник 'component'. Итак, '{{component componentName}}} как [здесь] (https://ember-twiddle.com/e20cf37c2425a68e7edc?openFiles=cmp.template.hbs%2Ccmp.route.js) – Lux

Смежные вопросы