0

修正されたコードについては、以下のこの問題チェックを解決しました。この問題は、Jquery ダイアログを使用して単一ページの作成、更新、および削除機能を構築することにありました。完全な作業コードはここにあります。 https://github.com/frozzie/ModalCrud

私は単一ページのクラッドに取り組んでいます。

現在、表示ボタンをクリックして、別のページではなくダイアログの同じページにユーザー情報を表示しようとしています。

ダイアログを機能させることはできましたが、データを表示する際に問題が発生しました。ダイアログがポップアップしますが、情報がありません。

Railsのさまざまなファイル形式を参照することに慣れているとは言えませんが、どの変数名を参照すればよいかわかりません。

基本的に私の質問は、.html.erb の javascript に対して $('#<%= dom_id @user%>') に相当するものを取得することです

関連するコードは次のとおりです。

これは、ダイアログでレンダリングするパーシャルです。@user は何も参照していないようです。$('#<%= dom_id @user%>') を試しましたが、正しく使用する方法がよくわかりません。

 <p>
   <b>User name:</b>
   <%= @user.user_name %>
 </p>

<p>
  <b>Email:</b>
  <%= @user.email %>
</p>

<p>
  <b>Password:</b>
  <%= @user.password %>
</p>

<p>
  <b>Account type:</b>
  <%= @user.account_type %>
</p>

これは私のshow.js.erbです

$( "#show-form" ).dialog( "open" );

これは私のダイアログコードです:

 $( "#show-form" ).dialog({
        autoOpen: false,
        height: 400,
        width: 350,
        modal: true,
        closeOnEscape: true,
        resizable:false,
        buttons: {
            Cancel: function() {
                $( this ).dialog( "close" );
            }
        }
    })

そして、これはショーをクリックするとダイアログとして表示される私のフォームです。

<div id="show-form" title="User Information"><%= render :partial => "userinfo"%></div>

これを変更してダイアログに情報を表示する方法についての助けをいただければ幸いです。


修正されたコード: パーシャルとしてレンダリングする代わりに、ダイアログ フォームを内部に含めました。ユーザーごとにダイアログをレンダリングするというアイデア。

  <tr id = "<%= dom_id user%>">
    <td><%= user.user_name %></td>
    <td><%= user.email %></td>
    <td><%= user.password %></td>
    <td><%= user.account_type %></td>
    <td><%= link_to 'Show', user, :remote=>true%></td>
    <td><%= link_to 'Edit', edit_user_path(user), :remote => true %></td>
    <td><%= link_to 'Destroy', user, :remote => true, method: :delete, data: { confirm: 'Are you sure?' } %>
    </td> 
    <div id = "show-form">
    <p>
    <b>User name:</b>
      <%= user.user_name %>
    </p>

    <p>
    <b>Email:</b>
      <%= user.email %>
    </p>

    <p>
    <b>Password:</b>
      <%= user.password %>
    </p>

    <p>
    <b>Account type:</b>
      <%= user.account_type %>
    </p></div>
    </tr>

これは、ダイアログの JavaScript です。

        $( "#show-form" ).dialog({
        autoOpen: false,
        height: 400,
        width: 350,
        modal: true,
        closeOnEscape: true,
        resizable:false,
        buttons: {
            Cancel: function() {
                //$("#new_user")[0].reset();
                $( this ).dialog( "close" );
            }
        }
    })

これはクリック時に発生します。

$("#show-form").dialog( "open" );
4

1 に答える 1

1

電話すると

$( "#show-form" ).dialog( "open" );

「#show-form」は、ページに既にレンダリングされている必要があります。非表示 ("display: none;") の場合もありますが、ブラウザーで認識される必要があります。

したがって、ユーザーリストで:

<% users.each do |user| %>
   <div id="<%= dom_id(user) %>" title="User Information" style="display: none;"><%= render :partial => "userinfo", :user => user %></div>
<% end %>

「userinfo」で「@user」を「user」に変更します。

任意の Javascript ヘルパーで、ユニバーサル ダイアログの呼び出し元関数を作成します。

function show_as_dialog(dom_id) {
  $(dom_id).dialog( "open" );
}

そして、「表示」をリンクします(「ユーザー」ごとに):

<%= link_to_function "Show", raw("show_as_dialog('#{dom_id(user)}')") %>
于 2012-12-17T12:14:06.240 に答える