1

明けましておめでとうございます。

ユーザーがリスト内の各レコードのリンクをクリックしているときに、ダイアログ(モーダルウィンドウ)ウィンドウの「リスト」に各レコードの詳細を表示する必要があるプロジェクトに取り組んでいます。GrailUI プラグインを使用してこれを達成しようとしています。これが私のコードです:

<gui:dialog width="300px" 
           controller="tag" 
           action="showTags" 
           params=" [id:userInstance.userId]" 
           update="dialogData" 
           draggable="true" 
           triggers="[show:[type:'link', text:'Show Tags', on:'click']]" 
           modal="true">
   <div id='dialogData'>This will be updated by the controller action....</div> 

何らかの理由で、ダイアログ タグがコントローラー アクションを起動していません。ダイアログウィンドウが開きますが、「これはコントローラーアクションによって更新されます....」というメッセージだけが表示されます。出力(ビュー)でレンダリングされたコントローラーアクションを表示していません。誰かが私が間違っていることを理解するのを手伝ってくれますか?

jquery と jquery-ui は、プロジェクトで使用している他のプラグインです。

あなたの助けに感謝。

編集

     def test(Integer max) {
        ....
        ....
        userInstanceList = User.list(params)
        render (view: "test", model: [userInstanceList: userInstanceList, userInstanceTotal: User.count()])

}           

def showTags () {
    def user = User.findByUserId(params.id)
        def tagInstanceList = user.tags
    render(view: "test", model: [tagInstanceList: tagInstanceList])
}
4

1 に答える 1

2

何かをリモートに送信したい場合は、設定する必要がありますform="true"。次に、フォームを定義せずに任意のフォーム要素をダイアログ タグ内に配置できます。form="true" の場合、ダイアログは独自のフォームを作成します。

これが私がテストした例です:

test.gsp:

    <html>
        <head>
            ....
            <r:require modules="grailsui-dialog"/>    
        </head>
        <body class="yui-skin-sam">            
            <gui:dialog width="300px" 
               controller="test" 
               action="showTags" 
               params=" [id:userInstance.userId]" 
               form="true"                        <!-- the key to remote submit -->
               update="dialogData" 
               draggable="true" 
               triggers="[show:[type:'link', text:'Show Tags', on:'click']]" 
               modal="true" >    
               <!-- You can put any input element here, which will be submitted in the form-->
               <div id='dialogData'>This will be updated by the controller action....</div>   
           </gui:dialog>
       </body>
   </html>

テストコントローラー:

class TestController {

    def test() { 
        .........
    }

    def showTags() {
        def user = User.findByUserId(params.id)
        def tagInstanceList = user.tags
        render(template: "ajaxResponse", model: [tagInstanceList: tagInstanceList, user:user])          //render a template, not a view
    }

Ajax リクエストの場合、元のページを置き換えるビューをレンダリングすることはできません。代わりに、ダイアログに表示するタグを含むテンプレートを送り返す必要があります。

_ajaxResponse.gsp

<h3>Tag List of user ${user.username}</h3>
<g:each in="${tagInstanceList}" var="tag">
    <p>${tag}</p>
</g:each>
于 2013-01-02T15:43:17.953 に答える