рельсы рендеринга AJAX выводит экран, полный JavaScript - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь получить базовый AJAX, работающий на рельсах.У меня есть главная страница comon, с баннером, боковой панелью и основной областью.В боковой панели я добавил выпадающее меню и кнопку (неуклюже, я знаю, но вы должны начать с чего-то), чтобы изменить атрибут просмотра сайта пользователем (выбранной сети).Идея состоит в том, что при изменении сети функциональность AJAX должна изменять список сайтов, отражая тот факт, что сеть изменилась.

Проблема в том, что при запуске кода AJAX я получаю JavaScript, появляющийся в моем окне браузера, вместо обновления соответствующего элемента

try {Element.update("site_list_body", "<-- the correct html appears here -->");} catch (e) { alert('RJS error:\n\n' + e.toString());
alert('Element.update(\"site_list_body\", \"<--same html code here too-->");'); throw e }

Я посмотрел вокруг stackoverflow иGoogle, и, несмотря на попытки различных предложений, ни один из них, кажется, не работает в данный момент.Любая помощь будет оценена: -)

Спасибо

Стив

Итак (с упрощениями) - моя главная страница выглядит следующим образом

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title>Networks: <%= controller.action_name %></title>
  <%= stylesheet_link_tag 'frontier', 'menus' %>
  <%= javascript_include_tag :defaults %>
</head>
<body id="frontier-network">
  <div id="banner"
    <--banner and menu stuff -->
  </div>

<div id="columns">
  <div id="side">
     <-- some other stuff -->

     <div id="site_list_body">
        <%= render :partial => "shared/network_site_list", :locals => {:site_list => @site_list} %>
     </div>

     <div>
        <% form_for :user, :url=>{:controller=>'users', :action => :change_network} do |f| %>   
        <-- this is where the dropdown list etc goes -->
     </div>
  </div>

  <div id="main">
     <%= yield :layout%>
  </div>
</div>

Файл javascript .rjs.js содержит page.replace_html ("site_list_body",: part => "shared / network_site_list",: locals => {: site_list => @site_list})

И код контроллера такойследует:

def change_network
  @user = User.find(session[:user_id])
  new_network_id=params["user"]["current_network_id"]
  @user.current_network_id=new_network_id.to_i
  @site_list=Site.find_all_by_network_id(@user.current_network_id)

  respond_to do |format|
    format.js 
  end
end

1 Ответ

1 голос
/ 08 марта 2012

Я думаю, что ваш файл JavaScript должен называться change_network.js.erb и внутри

$("#site_list_body").html('<%= escape_javascript(render 'shared/network_site_list') %>');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...