Шаблон Rails RJS отображает код вместо html-страницы - PullRequest
1 голос
/ 06 апреля 2010

После того, как гуглил и поразил мой мозг часами, я решил опубликовать этот вопрос. Вот код ...

view1.html.erb
-------------- 
<%=link_to_remote_redbox "Link", :url => {:action => :action1, :id => @some.id} 

some_controller.rb
------------------
def action1
  render :layout => false
end

def action2
  do some processing
end


action1.html.erb
--------------------
<form onsubmit="new Ajax.Request('/some_controller/action2', {asynchronous:true, evalScripts:true, onComplete:function(request){RedBox.close(); return false;}, parameters:Form.serialize(this)}); return false;}" method="post" action="/some_controller/action2">
<input type=text name='username'>
<input type='submit' value='submit'> 
</form>  

action2.rjs
-----------
page.replace_html("some_div", (render(:partial => "some_partial")))

с этим кодом, когда action2.rjs запускает его, должна отображаться html-страница, вместо этого я получаю это

Element.update("some_div", "<style type=\"text/css\">\n\n..............

Как предлагается в других постах, которые я прочитал, они говорят, что это вызвано ": update => some_div" в функции link_to_remote_redbox, но, очевидно, в моем коде этого нет.

Помощь всегда ценится. Большое спасибо

Ответы [ 3 ]

0 голосов
/ 06 апреля 2010

Попробуйте следующее: -

def action2
  render :update do|page|
    page.replace_html, 'some_div', :partial => 'some_partial'
  end
end

ИЛИ

<form onsubmit="new Ajax.Request('', {asynchronous:true, evalScripts:true, onComplete:function(request){RedBox.close(); return false;}, parameters:Form.serialize(this)}); return false;}" method="post" action="/some_controller/action2">
0 голосов
/ 06 апреля 2010

Метод Салила будет работать, если вы хотите позвонить, вернуть вызов ajax из вашего браузера ... но если вы хотите вызвать более сложный javascript (который может быть грязным в вашем контроллере), вы можете сделать это вместо этого:

def action2
  ...some code
  respond_to do |format|
    format.js
  end
end

Это явно скажет rails возвращать javascript, а не html. Это также полезно, если вы используете JQuery, а не RJS.

ура!

0 голосов
/ 06 апреля 2010

Убедитесь, что макет содержит файлы javascript по умолчанию. Другими словами:

...