Создание формы в диалоговой панели UI Jquery с использованием Rails / ERB - PullRequest
1 голос
/ 07 декабря 2011

Извините, если это глупый вопрос, но я не могу заставить это работать.Я пытаюсь получить форму в диалоговой панели.Форма является результатом запроса AJAX, и полученный файл js.erb выглядит следующим образом:

$(function() {
$('#add_tag').html(
  "<fieldset>"
  "<%= escape_javascript(form_tag(save_tag_path(:id=>@recipe.id), :remote=>true) do ) %>" +
  "  <%= escape_javascript(label_tag(:new_tags, 'Your tags separated by commas')) %>" +
  "  <%= escape_javascript(text_field_tag :new_tags) %>" +
  "  <%= escape_javascript(submit_tag :submit) %>" +
  "<% end %>" +
  "</fieldset>"
);

$('#add_tag').dialog({
      title: "Add Tags",
      height: 300,
      width: 350,
      modal: true

      }    
);
});

Я знаю, что синтаксис формы в порядке, поскольку он работает вне диалога.Я предполагаю, что это что-то не удалось избежать должным образом?Заранее спасибо!

ОБНОВЛЕНИЕ: Я удалил оболочку $ (function () {}, как правильно указал Бен Симпсон. Однако я все равно ничего не визуализирую на панели с помощью erb. Вот что у меня сейчас:

$('#add_tag').html(
"<fieldset>" 
+ "<%= form_tag(save_tag_path(:id=>@recipe.id), :remote=>true) do  %>" 
+ "  <%= escape_javascript(label_tag(:new_tags, 'Your tags separated by commas')) %>" 
+ "  <%= text_field_tag :new_tags %>" 
+ "  <%= submit_tag :submit %>" 
+ "<% end %>" 
+ "</fieldset>"
);
$('#add_tag').dialog({
  title: "Add Tags",
  height: 300,
  width: 350,
  modal: true

  }    
);

Но если я просто введу форму, которая делает рельсы, она работает. Т.е.:

$('#add_tag').html(
  "<fieldset>" 
  +  '<form method="post" data-remote="true" action="/recipes/1/save_tag" accept-charset="UTF-8">'
  +  '<div style="margin: 0pt; padding: 0pt; display: inline;">'
  +  '</div>'
  +  '<label for="new_tags">Your tags separated by commas</label>'
  +  '<input id="new_tags" type="text" name="new_tags">'
  +  '<input type="submit" value="submit" name="commit">'
  +  '</form>' 
  +  "</fieldset>");

1 Ответ

0 голосов
/ 07 декабря 2011

Ваш ответ обернут в закрытие "$ (function () {}", которое является сокращением jQuery для привязки к событию DOM: загружено. Это уже было запущено, поскольку страница была загружена.

Удалите эту строку, и ваша функция должна автоматически оценить.

Javascript внутри ответа AJAX должен оцениваться автоматически, если тип MIME - text / javascript. Дополнительную информацию о ответах jQuery AJAX можно найти здесь: http://api.jquery.com/jQuery.ajax/

...