0

我正在使用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调用中。任何帮助,将不胜感激 :)

4

1 回答 1

0

您可以要求特定格式:

render :partial => "pages/page.html"
于 2011-05-06T22:10:15.443 回答