RJS возвращает простой JavaScript без тегов JS - PullRequest
2 голосов
/ 11 января 2010

Вот код, который можно посмотреть в шаблоне действия «показать» в FeesController:

<div id="payers_controls">
      <%= link_to_remote('New payer',
                               :update => "payers_controls", 
                               :url => new_payer_url) 
      %>
</div>

Вот new.rjs - принадлежит PayersController «новое» действие

page.replace_html "payers_controls", :partial => "form", :object => @payer

Вот «новое» действие в PayersController

  def new
    @payer = Payer.new(params[:payer])
  end

Вот частичное "form" для "нового" действия в PayersController

   <%= "Damn text to see if this damn partial is rendered properly" %>

И затем я нажимаю ссылку «Новый плательщик», она выводит меня из простого JS внутри «payers_controls» DIV:

try { Element.update("payers_controls", "Damn text to see if this damn partial is rendered properly"); } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.update(\"payers_controls\", \"Damn text to see if this damn partial is rendered properly\");'); throw e }

И какого черта этот чертов ответ не заключен в теги SCRIPT? Нужно ли создавать еще один скрытый заполнитель с тегами SCRIPT на странице для ответов JS?

P.S. Пожалуйста, поймите мою ярость, потому что я новичок в AJAX на Rails, я хочу быть педантичным программистом и, черт возьми, я хочу, чтобы мой код выглядел красиво и чисто.

1 Ответ

3 голосов
/ 11 января 2010

Проблема в том, что вы пытаетесь обновить содержимое дважды с помощью JS.

Я бы удалил параметр: update из вашего тега link_to_remote или удалил шаблон RJS.

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

Надеюсь, это поможет. Что-нибудь еще, просто дайте мне знать.

Kent

...