RJS в контроллере

  • я поместил следующие rjs в контроллер... но это дает мне следующую ошибку...

TypeError: Element.update не является функцией

   respond_to do |format|
    format.js do
      responds_to_parent do
        render :update do |page|
          page.replace_html 'errorLay', :text => "Page with the same name already exists."
          page.show 'errorLay'
          page.delay(2) do
            page.hide 'errorLay'
          end
        end
      end
    end
  end
  • так как я могу избавиться от этой ошибки...?

3 ответа

Решение

Возможно, это неправильно, потому что вы пытаетесь использовать responseds_to_parent внутри блока response_to.

Я не знаю, можете ли вы их смешать. Предлагаю попробовать без блока response_to. Чтобы правильно отвечать на типы запросов, вы можете сделать как

if request.xhr?
  responds_to_parent do
    render :update do |page|
      page.replace_html 'errorLay', :text => "Page with the same name already exists."
      page.show 'errorLay'
      page.delay(2) do
        page.hide 'errorLay'
      end
    end
  end
end

Таким образом, только отвечает с JS, когда был вызов AJAX. Но я предлагаю использовать файл RJS вместо рендеринга с контроллера.

В твоем контроллере только пиши

   render :update do |page|
      page.replace_html 'errorLay', :text => "Page with the same name already exists."
      page.show 'errorLay'
      page.delay(2) do
        page.hide 'errorLay'
      end
    end

и что вы используете для Ajax link_to_remote или что-нибудь еще don't write:update=>'some_div'

Похоже, вы забыли включить prototype.js в вашем макете. Убедитесь, что у вас есть

<%= javascript_include_tag "prototype" %>

в разделе HEAD макета вашего документа.

Другие вопросы по тегам