Сбросить форму для новой проверки, рельсы 3.1 - PullRequest
1 голос
/ 26 декабря 2011

в моем приложении rails 3.1 У меня есть одна форма, которую нужно использовать несколько раз. У меня есть список групп проектов и форма для новых ниже. После создания я отображаю новую группу после всех существующих и делаю $ ('# new_project_group') [0] .reset (). Это делает форму пустой, но у меня проблема с проверками.

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

Кто-нибудь знает, как сбросить форму с проверками?

UPD Вот код для другой модели, но с той же проблемой. Здесь я отрисовываю диалог с формой и после добавления диалог прячется. В следующий раз я просто открою тот же диалог с перезагруженной формой.

Контроллер:

class Accounts::FeedbackMessagesController < Accounts::ApplicationController
defaults :resource_class => FeedbackMessage
load_resource :feedback_message
respond_to :js

def create 
    @feedback_message.user_id = current_user.id
    @feedback_message.user_email = current_user.email
    @feedback_message.user_name = current_user.full_name
    create!
end
end

Форма:

<%= semantic_form_for resource, :remote => true, :validate => true do |f| %>
<%= f.inputs do %>  
    <%= f.input :description, :input_html => {:id => 'test'} %>

        <br/>
  <div class="links">
      <%=link_to_add_association t('asset.add'), f, :assets %>  
    </div>

<%end%>
<%= f.buttons do %>
    <%= f.commit_button :button_html => { :disable_with => "#{t('share.wait')}" } %>
<% end %>
 <% end %>

new.js.coffee:

if $('#feedback_dialog').html() == ""
$('#feedback_dialog').html('<%= escape_javascript(render 'form') %>').dialog(
  open: ->
    $('form[data-validate]').validate()
  close: ->
    $("#feeadback_dialog_link").click -> 
      $('#feedback_dialog').dialog "open"
      return false
)
 else
$('#feedback_dialog').dialog "open"

create.js.coffee:

  $('#feedback_dialog').dialog "close"
  $('#new_feedback_message')[0].reset()

1 Ответ

2 голосов
/ 07 апреля 2012

У меня была очень похожая проблема:

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

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

Как работает проверка на стороне клиента, так это то, что она хранит данные о фактическом элементе (это текстовый ввод), например:
$ ( '# Edit_event_title') данные ().

Когда страница загружается, это выглядит так:
$ ( '# Edit_event_title'). Данные ()
Объект
проверить: правда
прото : объект

Теперь, если вы введете неверные данные и оставите поле, используя ошибка по умолчанию, отображаемая , отобразятся некоторые поля ошибок. Это также обновляет ваш элемент к этому:
$ ( '# Edit_event_title'). Данные ()
Объект
изменено: ложь
действительный: false

проверить: правда
прото: объект

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

$('#edit_event_title').removeData("changed");
$('#edit_event_title').removeData("valid");
$('#edit_event_title').trigger('element:validate:pass')

Из того, что я могу сказать, настоящая библиотека "rails.validations.js" / gem_ client_side_validation не имеет каких-либо специальных функций для удаления ошибки по требованию (все выглядит как обратные вызовы).

Если у кого-то есть лучшее решение, пожалуйста, дайте мне знать. В противном случае приведенное выше позволит вам удалить client_side_validations по требованию.

...