我正在使用haml,所以希望你能理解这里的html。我认为它更容易阅读,但有些人不喜欢它: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 它按预期工作。
这是我用来处理 rails.js 在提交表单时给我的事件的 jquery:
$('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
调用中。任何帮助,将不胜感激 :)