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」という名前でコンテンツを逐語的に複製する代わりに、同じ部分的なもの.アクションがjsコンテンツではなくhamlコンテンツをレンダリングするためにここで何が欠けているか知っている人はいますか?更新を正しく実行すると今、それは私にこのエラーを与えます:

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 に答える