Простой Rails AJAX вопрос - PullRequest
       13

Простой Rails AJAX вопрос

0 голосов
/ 18 декабря 2010

Извините за новый вопрос, о мудрые.

Я хочу привязать флажок в представлении «проекты» к функции js, которая массирует данные, а затем отправляет их через ajax на «полное» действие контроллера «задач».

Я использую jQuery, поэтому инстинктивно я помещаю привязку и обратные вызовы в application.js, но это, очевидно, неправильно. Какой самый лучший и самый ненавязчивый способ сделать это?

Спасибо!

Ответы [ 2 ]

1 голос
/ 18 декабря 2010

Если у вас есть функция, которая относится только, скажем, к представлению индекса контроллера проектов, вы можете сделать следующее:

Добавить yield :head в раздел вашего макета.Это позволит вам добавить контент в заголовок позже, далее -

В представлении (т.е. views / projects / index.html.erb ', добавьте:

<% content_for :head do %>
  javascript_include_tag 'projects_index.js'
<% end %>

В javascripts/projects_index.js, используйте готовый блок документа и привязывайте обработчик событий.

Примечания

  1. Я не уверен, что вы хотите "ненавязчивый".1014 *
  2. Отправка ajax-запросов при нажатии флажка может не соответствовать ожиданиям
0 голосов
/ 18 декабря 2010

Ненавязчивый термин плохо определен, но я понимаю, что он подразумевает несколько вещей, включая прогрессивное улучшение (позволяющее небольшой доле Интернета, не использующего JavaScript, по-прежнему использовать ваше приложение) и отделение контента от функциональности (то же самое, что стили не применяется непосредственно к элементам DOM). Это означает, что если вы хотите быть по-настоящему «ненавязчивым», вы должны делать что-то похожее на то, что вы говорите.

Однако в Rails вы обычно обрабатываете обратные вызовы, используя новое представление. Ознакомьтесь с языком шаблонов RJS, который позволяет легко отображать JavaScript для выполнения на клиенте. Вот быстрый пример:

# application.js
$("#project .complete:checkbox").click(function () {
   $.post('/projects/complete', {...});
})

# projects_controller.rb
def complete
  @project = Project.find(...)

  respond_to do |format|
    format.js
  end
end

# complete.js.rjs
page << "$('##{dom_id(@project)}').effect('highlight');"

Примечание : вы можете использовать большинство языков шаблонов (например, ERB), однако я обычно использую RJS для таких вещей.

...