Метод RJS, выводящий необработанный JavaScript
У меня есть страница, на которой я динамически добавляю элементы из ряда блоков выбора. Я использую RJS для этого, и он отлично работает. Теперь эти элементы в элементе div представляют собой последовательность, сопровождаемую кнопками Delete, если пользователь хочет удалить текстовое поле. Вот где я бью стену.
Вот код, который запускает кнопку Удалить. Насколько мне известно, это работает хорошо:
<%= link_to image_tag("/images/button_delete.gif", :alt=>"Delete"), :controller=>"report", :action=>"remove", :id=>@sentence.id %>
В моем контроллере отчетов у меня есть этот очень простой метод, вызываемый приведенным выше кодом:
def удалить @sentence_id = params[:id] end
Опять же, я думаю, что это работает. Теперь, когда я активирую это действие нажатием кнопки, мы переходим к RJS-файлу remove.rjs:
page.remove 'sentence_'+@sentence_id
И вот что я получаю в своем браузере вместо удачно удаленного элемента!
try
{
Element.remove("sentence_63");
}
catch (e)
{
alert('RJS error:\n\n' + e.toString());
alert('Element.remove(\"sentence_63\");');
throw e;
}
Насколько я понимаю, это происходит, когда в текущем контексте нет страницы. Онлайн документация по этому вопросу довольно тонкая.
Любая помощь приветствуется! Ура, Аарон.
3 ответа
Так как ваш remove
Похоже, что функция на самом деле не удаляет запись, если вы просто хотите удалить элемент HTML со страницы, которую вы можете использовать link_to_function
с прототипом remove()
метод для элементов. Кроме того, если у вас есть последняя версия Rails (например, 2.3.2), вы можете воспользоваться dom_id
помощник для автоматического создания sentance_id
Атрибут ID
<%= link_to_function(image_tag("button_delete.gif", :alt=>"Delete"), "$('#{dom_id(@sentence}').remove();" %>
Такой подход может помочь уменьшить количество методов в вашем контроллере (если вы не собираетесь делать что-то еще в контроллере)
Попробуйте ссылку на пульт. Это создаст для вас вызов ajax и должен удалить элемент со страницы.
Тогда синтаксис link_to_remote немного отличается от синтаксиса link_to, так что не позволяйте этому также сбить вас с толку.
Ваша ссылка Удалить настроена как обычная ссылка, т.е.
<a href="/report/remove" id="sentence_63">
<img src="/images/button_delete.gif" alt="Delete" />
</a>
который запускает нормальный HTTP-запрос. Поскольку ваше намерение - вызвать запрос AJAX, попробуйте рекомендацию PJ Davis и используйте link_to_remote