Улучшение функции remote_function с использованием «продвинутого» AJAX - PullRequest
0 голосов
/ 27 марта 2011

Я использую Ruby on Rails 3 и пытаюсь улучшить запрос AJAX в файле представления, используя метод remote_function. Следующий код отобразит текст Fire AJAX, когда указатель мыши находится над <div id="test_id_div">...</div>, и вызовет метод контроллера действий при нажатии на Fire AJAX.

В файле просмотра у меня есть:

<div id="test_id_div">
  <span id="test_id_span" %> style="display: none">
    <%= link_to_function 'Fire AJAX', remote_function(:url => {:action => :action_method_name, :controller => 'controller_name'}) %>
  </span>

  <%=
    update_page_tag do |page|
      page.event.observe("test_id_div", 'mouseover') do |element|
        element[("test_id_span").to_sym].show
      end
      page.event.observe("test_id_div", 'mouseout') do |element|
        element[("test_id_span").to_sym].hide
      end
    end
  %>
</div>

Приведенный выше код работает, однако я хотел бы улучшить его каким-то «лучшим» способом (пример: писать меньше кода, ...). Как я мог это сделать?


PS : В моем случае Fire AJAX вызовет метод контроллера действий, который обновит запись в базе данных, поэтому я хотел бы знать, что я должен \ должен знать о безопасности тоже.

1 Ответ

0 голосов
/ 27 марта 2011

Что касается эффекта mouseover/out, это может быть достигнуто с помощью штрих-кода CSS (не поддерживается IE6):

Еврорадио:

<div id="test_id_div">
  <span id="test_id_span" %>>
    <%= link_to_function 'Fire AJAX', remote_function(:url => {:action => :action_method_name, :controller => 'controller_name'}) %>
  </span>
</div>

CSS:

#test_id_div span { display: none; }
#test_id_div:hover span { display: block; }

Я не использую ни Prototype, ни связанные с ним помощники, но я вполне уверен, что вы также сможете использовать link_to… :remote => true и в этом случае, поскольку кажется, что вы не вызываете локальную функцию JS:

<%= link_to 'Fire AJAX', :action => :action_method_name, :controller => 'controller_name', :remote => true %>

И еще больше упростить: если вы хотите просто скрыть / показать ссылку, почему бы не избавиться от одного контейнера?

<div id="test_id_div">
  <%= link_to 'Fire AJAX', :action => :action_method_name, :controller => 'controller_name', :remote => true %>
</div>

#test_id_div a { display: none; }
#test_id_div:hover a { display: block; }

Надеюсь, я вас где-то не понял, но это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...