2014-09-22 3 views
5

Я нахожусь в середине создания своего первого реального приложения Rails, и я учусь в пути. У меня есть ситуация, когда мне нужно создать вложенные атрибуты в одной форме, и поэтому они рассматривают эпизоды railscast, имеющие отношение к этому (196 и 197). Во втором эпизоде ​​он использует метод link_to_function, который, по-видимому, больше не доступен в rails 4.1.Как заменить link_to_function for rails 4.1

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

Вот что мой частичный вид выглядит как на данный момент (хотя, я пробовал много вещей ...)

<p class="offset1 fields"> 
    <%= f.hidden_field :_destroy %> 
    <%= link_to "remove", '#', onclick: 'remove_fields("this")' %> 
</p> 

А вот мой файл, содержащий .js.coffee remove_fields (функция) :

remove_fields = (link) -> 
    $(link).previous("input[type=hidden]").value = 1 
    $(link).up(".fields").hide 

Эта функция должна удалить поле из формы, но вместо этого просто добавляет «#» в URL без вызова функции.

Каков наилучший способ ссылки на функцию javascript (coffeescript) в активах из представления?

+0

увидеть это http://stackoverflow.com/questions/14324919/status -of-rails-link-to-function-deprecation – tito11

ответ

4

Хороший способ справиться с этим:

а) Установите HREF атрибут "JavaScript: недействительным (0);" б) Установить DOM идентификатор или атрибут класса CSS к вашей ссылке

<%= link_to "remove", "javascript:void(0);", id="remove_link" %> 

с) добавить JS нажмите слушателю вашего элемента (пожалуйста, проверьте, является ли это правильный синтаксис CoffeeScript)

$ -> 
    $('#remove_link').click =()-> 
    $(link).previous("input[type=hidden]").value = 1 
    $(link).up(".fields").hide 

d) Всегда избегайте использования onclick: по элементам html.

UPDATE:

е) Вот альтернатива, что может работать для вашего кода (после того, как ваш комментарий):

$ -> 
    $('#remove_link').click =()-> 
    $('.offset1.fields input').attr('value', 1); 
    $('.offset1.fields').hide(); 
+0

Все еще не работает. Я изменил файл coffeescript, чтобы просто выполнить оператор предупреждения только для его проверки, но он никогда не запускается. Щелчок по ссылке ничего не делает, за исключением того, что в левом нижнем углу браузера указано, что он выполняет «javascript: void (0);» –

+0

Навигация к /assets/application.js показывает, что функция была правильно скомпилирована в javascript и включена, но она не вызывается по какой-либо причине. –

+0

- это ваша новая функция javascript внутри документа готова? Я немного обновил свой ответ, чтобы продемонстрировать его. –

 Смежные вопросы

  • Нет связанных вопросов^_^