Метод 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

Другие вопросы по тегам