2013-09-11 5 views
0

Я начал использовать железо-роутер. У меня есть несколько страниц «волшебник». В конце каждой страницы есть кнопка «Далее» с href, заполненной {{pathFor 'nextPage}} href. Это отлично работает ... но, когда я нажимаю кнопку «Назад», мои введенные пользователем значения поля исчезают.Сохранять формы ввода между маршрутами?

Я собираюсь сохранить введенные значения с помощью вызовов данных jquery() или использовать сеанс Meteor, но я должен поверить, что для этого есть лучший (встроенный?) Способ. Я просто не вижу никаких советов/документации по этому поводу. Я искал атмосферу для пакета и не нашел ничего, что точно соответствует ему (много помощников формы, таких как автоформат, но не что-то конкретное, связанное с железным маршрутизатором).

Любые предложения чрезвычайно оценены.

+0

Что об использовании сеанса для хранения объекта представления формы входа для каждого страница? – booyaa

+0

Вот что я планировал. Но я буду писать код, чтобы сохранить состояние любого типа ввода формы и восстановить его в обратном вызове после рендера. Это означает пополнение входов, текстовые поля, радио, флажки, всю гамму. Я как бы надеялся, что кто-то создал пакет, чтобы сделать это уже (что получилось с железным маршрутизатором). Похоже, что, может быть, написать этот пакет будет для меня. Когда я закончу, я переставлю сюда, чтобы оставить панировочные сухари для следующего человека, которому нужно что-то подобное. Благодаря! –

ответ

0

Отредактированный в ответ, как и на Jeopardy:

Ремесло ваш ряд форм в виде серии дивы вы скрыть или показать, что не все в существование до конца, и нет ничего, чтобы переместить или сохранить ,

Ответ 2: Сделайте свои волшебники отредактированными на вставке так же, как они будут редактировать при обновлении. Создайте исходный документ, указав флаг, который не завершен, обновите его значения из DOM, как и во время редактирования, а затем обновите флаг, как только он очистит все ваши экраны мастера. Шаблоны становятся намного более пригодными для повторного использования.

+0

Это не ответ, это было бы лучше подходит как комментарий к вопросу OP. – booyaa

0

Правило большого пальца, которое я видел, - это: Если вы хотите сохранить значения между загрузками страниц (это то, что делает кнопка «Назад», перезагрузить предыдущую страницу), поместите их в URL-адрес.

Я не думаю, что Meteor поддерживает вид сеанса на стороне сервера, который вы получаете на некоторых языках веб-скриптинга, что, кажется, то, о чем вы думаете.

+1

Метеор поддерживает сеансы довольно красиво, как на сервере, так и на стороне клиента, cf их документы: http://docs.meteor.com/#session. Ввод значений в URL-адрес - это 1999 :-) –

3

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

Возможно, стоит отметить, что в ветке dev железного маршрутизатора названные урожаи работают немного по-другому. В версии выпуска названные уроки макета заменяются на каждом новом маршруте. Другими словами, даже если визуализированный шаблон одинаковый, он все еще полностью оторван от страницы и снова отображается. В ветви dev указанная область yield только повторно отображается, если шаблон фактически изменяется.

Так что в вашем случае (в Dev филиала), вы можете сделать что-то вроде следующего (только для иллюстрации концепции):

Router.map(function() { 
    this.route('stepOne', { 
    template: 'wizard', 
    path: '/stepOne', 
    action: function() { 
     Session.set('wizardStep', 'stepOne'); 
     this.render('wizard'); // same as this.render() 
    } 
    }); 

    this.route('stepTwo', { 
    template: 'wizard', 
    path: '/stepTwo', 
    action: function() { 
     Session.set('wizardStep', 'stepTwo'); 
     this.render(); 
    } 
    }); 
}); 

<template name="wizard"> 
    {{#ifStepEquals "stepOne"}} 
    <!-- do something with step one --> 
    {{/ifStepEquals}} 

    {{#ifStepEquals "stepTwo"}} 
    <!-- do something here with step two --> 
    {{/ifStepEquals}} 
</template>