2009-05-12 2 views
0

У меня есть страница, где я динамически добавляю элементы из a из ряда блоков выбора. Я использую RJS для этого, и он отлично работает. Теперь эти элементы в div являются сериями, которые сопровождаются кнопками Delete, если пользователь хочет удалить текстовое поле. Вот где я ударяю стену.Метод RJS, выводящий raw javascript

Вот код, который запускает кнопку «Удалить». Это хорошо работает, насколько мне известно:

<%= link_to image_tag("/images/button_delete.gif", :alt=>"Delete"), :controller=>"report", :action=>"remove", :id=>@sentence.id %> 

В моем контроллере отчета, я получил это очень простой метод вызывается с помощью приведенной выше коды:

Защиту удалить @sentence_id = PARAMS [: ID] конец

Опять же, я думаю, что это работает. Теперь, когда я активировать это действие, нажав на кнопку, мы идем в файл RJS, remove.rjs:

page.remove 'sentence_'[email protected]_id 

И вот что я получаю в моем браузере, вместо того, чтобы счастливо удаленного элемента!

try 
{ 
    Element.remove("sentence_63"); 
} 
catch (e) 
{ 
    alert('RJS error:\n\n' + e.toString()); 
    alert('Element.remove(\"sentence_63\");'); 
    throw e; 
} 

Я понимаю, что это происходит, когда в текущем контексте нет страницы. Онлайн-документация по этому поводу немного тонкая.

Любая помощь оценена! Cheers, Aaron.

ответ

0

Поскольку ваша remove функция не кажется, на самом деле удалить запись, если вы просто хотите, чтобы удалить HTML-элемент со страницы вы можете используйте link_to_function с прототипом remove() method для элементов. Кроме того, если у вас есть последняя версия Rails (например, 2.3.2), вы можете воспользоваться dom_id helper для автоматической генерации атрибута sentance_id ID

<%= link_to_function(image_tag("button_delete.gif", :alt=>"Delete"), "$('#{dom_id(@sentence}').remove();" %>

подход, как это могло бы помочь держите количество методов в своем контроллере (если вы не намерены делать что-то еще в контроллере)

1

Попробуйте связаться с пультом дистанционного управления. Это создаст вам вызов ajax и удалит элемент со страницы.

Тогда синтаксис link_to_remote немного отличается от синтаксиса link_to, поэтому не позволяйте этому путешествовать.

0

Ваша ссылка Удалить настроена как обычные линии, т.е.

<a href="/report/remove" id="sentence_63"> 
    <img src="/images/button_delete.gif" alt="Delete" /> 
</a> 

который запускает нормальный запрос HTTP. Так как ваше намерение состоит в том, чтобы вызвать запрос AJAX, попробуйте рекомендацию PJ Дэвиса и использовать link_to_remote