Я использую хамл, так что, надеюсь, вы поймете, что здесь происходит.На мой взгляд, читать легче, но некоторым это не нравится: p
На моей странице редактирования есть форма, которая выглядит следующим образом:
.center_col
-# I got into this weird habit of using "data-remote" for remote submission, w/e
= form_for @content, :html => {"data-remote" => true, :id => "page_editor", "data-page-id" => @content.id} do |f|
%h2
= f.label :textile, "Text", :class => 'inline'
(Parsed with
= link_to("Textile", "http://redcloth.org/textile/", :class => 'external') + ")"
%ul.fields
%li.field
= f.text_area :textile, :class => "full-field", "data-remote-preview" => preview_page_path(@content)
= display_error(:content, :textile)
%li.submit.left
= f.submit "Save Changes", :class => "rm_lr_margin"
Когда вы отправляете формуЯ хочу, чтобы действие контроллера отображало _page частично.Прямо сейчас действие контроллера пытается отрисовать 'pages / _page.js.haml', но я хочу использовать 'pages / _page.html.haml', потому что у меня есть ловушка jquery после успеха, которая автоматически заменяет содержимое в отредактированномобласть страницы с новым текстом.
Вот мое действие:
def update
load_content(params[:id])
@content.textile = params[:page][:textile]
if @content.save
render :partial => "pages/page", :content_type => "text/html", :layout => false, :locals => {:page => @content}
else
render :action => 'edit', :layout => false
end
end
В другом месте ...
def load_content(page_name)
@content = Page.find_by_name!(page_name)
@page = @content.name
end
Так что все это работает.За исключением того, что он отображает неправильный вид :( Когда вы впервые попадаете на страницу, ее раздел заполняется с использованием частичного «pages / _page.html.haml», и когда вы обновляете содержимое с помощью этого действия ajax, я хотел бы использовать этотот же частичный вместо того, чтобы дословно дублировать содержимое под именем «pages / _page.js.haml». Кто-нибудь знает, что мне здесь не хватает, чтобы заставить действие отображать содержимое haml, а не содержимое js? Когда я выполняю обновление правильнотеперь он выдает мне эту ошибку:
Template is missing
Missing partial pages/page with {:formats=>[:js, "application/ecmascript", "application/x-ecmascript", "*/*"], :locale=>[:en, :en], :handlers=>[:rxml, :haml, :builder, :rjs, :rhtml, :erb]}
Если я скопирую файл html.haml и назову его .js.haml, он будет работать, как и ожидалось.
Это jquery, который я используюдля обработки событий, которые rails.js дает мне при отправке формы:
$('form#page_editor').live({
"ajax:beforeSend": function(xhr, settings){
$.facebox.loading();
},
"ajax:success": function(e, data, status, xhr){
$.facebox.close();
$('#page_' + $(this).attr('data-page-id')).replaceWith(data);
},
"ajax:error": function(e, xhr, status, error){
$.facebox(xhr.responseText);
}
});
Не думаю, что эта часть была релевантной, но она показывает вам, когда в JS я обновляю содержимое наЯ подозреваю, что проблема либо в вызове render
моего действия, либо в вызове form_for
представления. Любая помощь будет принята:)