0

私が書いているようないくつかのGmailアプリケーションは、「ダッシュボード」である/userビューと/adminビューを必要とします。基本的に、ユーザーまたは管理者は、ログインに成功し、すべてのデータテーブルとタブがそこにあると、そのページにアクセスします。 、そのため、そのページから移動する必要はほとんどなく、GmailやMintのユーザーが慣れているように、より満足のいくユーザーエクスペリエンスを提供します。

メイン/ユーザーダッシュボードからの検索とフォーム投稿を可能にするために、私はmodalboxプラグインv0.4を使用していますgrails install modalbox。Modalboxは明らかにGET/POST自体を管理しており、残念ながら、一般的な制約ブロックが提供する検証の99%を失っています。

今のところ、g:submitButtonを置き換えて、これを回避し、図のようにいくつかの基本的なJavaScriptを送信に入れます。(もちろん、これはひどい回避策です。)

<input type="button" name="create" class="save" onclick="if (!(document.getElementById('name').value === '' || document.getElementById('summary').value === '')) { document.forms[0].submit(); }" value="Create" />

しかし、もっと良い方法があるはずです! g:remoteFormを使用するように言われましたが、Modalboxで動作するのに十分な完全な例を見ていません。たぶん人々はGmailの作成ウィンドウのように自動的に数秒を閉じる新しいウィンドウを使用していますか?

これは、SiteMeshテンプレート、または少なくとも「レンダリングテンプレート:」またはmodalBox:createLinkのようなGSPタグに適しているほど一般的なシナリオである可能性があります。

ここGtownプロジェクトスペースで入手可能なソース。

4

1 に答える 1

1

Modalbox の例では、検証エラーが既にライトボックスに隠されています: <p style="display:none">Invalid Email!</p> ので、Grails 検証を使用したい場合は、自分を形作る。この場合、ライトボックス プラグインはライトボックスの描画のみを担当し、すべてのフォーム コンテンツを提供します。

Boxy (Modalbox と同様に動作する別のライトボックス プラグイン) を使用しています。ライトボックス内で Grails 検証を使用する方法の例を次に示します。ライトボックスを作成するときは、「シェル」アクションを使用して塗りつぶします。シェル アクションはテンプレートをレンダリングし、テンプレートの内部には、最初に検索フォームを描画する <g:include> があります。<g:formRemote> は検証アクションを呼び出し、検証アクションの結果でライトボックスのコンテンツを再描画します。結果は、成功ページまたは検証エラー ページのいずれかになります。

コマンド オブジェクト (この例の SearchCommand) の使用は、デモンストレーションのためだけです。

コントローラ:

def launchLightbox = {
    render template: 'lightboxFrame'
}

def lightboxContents = { SearchCommand cmd ->

    // if the search failed, re-draw the search form with validation errors
    if (cmd.hasErrors()) {
        return [cmd: cmd]
    } 

    // the search succeeded. Show the results within the lightbox
    else {
        render template: 'searchResults', model: [results: cmd.results]
    }
}

_lightboxFrame.gsp:

<g:formRemote name="searchLightbox" 
        url="[action: 'lightboxContents']" update="lightboxContentsDiv">
    <div id="lightboxContentsDiv">
        <g:include view="/yourController/_lightboxContents.gsp"/>
    </div>
</g:formRemote>

_lightboxContents.gsp:

<g:renderErrors bean="${cmd}"/>
<p>Enter your search:</p>
<g:textField name="search" value="${cmd?.search}"/>
<g:submitButton name="submitButton" value="Submit"/>

検索が成功または失敗したときに何をするかをより詳細に制御したい場合、たとえば、失敗時に検証エラーをレンダリングしたり、成功時にライトボックスを閉じたりする場合は、おそらく独自の JavaScript コールバックを記述する必要があります。

この問題に多少関連していて、役に立つかもしれないのは、Grails Remote Constraints pluginです。しばらく試していませんが、これを使用して、Grails によって生成された検証エラーと非同期でページの一部を再描画できるはずです。

于 2010-07-13T02:03:57.397 に答える