2011-07-12 4 views
6

jqmでフォームを処理する最善の方法は何ですか?jQuery Mobileでフォームエラー状態を処理してHTMLを返す方法は?

たとえば、ユーザーがフォームを入力し、データの一部が検証されないとします。 JSの検証では選択されませんが、システムが処理できないという意味のビジネスロジックが発生します。

jqmでは、フォームはユーザーに戻され、フレームワークはそれをロードしてそれにナビゲートします。予期せぬことに、私は新しい状態ではなく、それをナビゲートしたくないのです。私はエラーメッセージとともに更新されたフォームを表示したいだけです。 不要なフルページのリロードを追加するので、ajaxを無効にしたくありません。

理想的には、jqmに履歴にレスポンスを含めないように指示する方法が理想的ですが、代わりに表示するだけです。

この作業がわかる唯一の方法は、自分の小さなフォームハンドラを作成してエラー状態を含むJSONをサーバーから返すことです。投稿がうまくいけば、次のページにナビゲートします。そうでない場合は、ビュー内のHTMLを、エラーメッセージを含むJSONオブジェクトの一部として返されたHTMLで更新します。

もっと良い方法があるようですね。

おかげ

+0

+1良い質問です。私はあなたが記述したものと同様のやり方で行いましたが、より良い選択肢があれば聞いてみましょう。 – Tsar

答えて

2

良い質問と私はあまりにも他の人が言っているか見て興味があります。デフォルトのアクションを提出防止

  1. :それは(もオフラインで作業をしなければならなかった)最近のアプリでは、価値がある何のために、私は自分のフォームを使用して、提案ルートを下って行きました。
  2. Webサービスに送信する前にデータをチェックするボタンからのajax呼び出しを使用するか、ステータスフラグとオンラインであるかどうかに応じてローカルデータベースに保存するだけです。
  3. すべての成功/失敗メッセージが送信コールバックを介してバックアップされるようにしてください。
  4. ...ユーザーの送信結果で同じhtmlページを更新します。

これはうまく動作し、ユーザーは満足しています。しかし、それは私の特定の状況に合っています。なぜなら、(a)jQMはハッシュで時折狂ってしまうかもしれないし、(b)潜在的にユーザがオフラインになり(Webサーバがないため)、クエリーストリング/ location.hashを使用したくないクエリーストリングを意味しない)。あなたの走行距離はもちろん変わります。

編集:コード私のアプリのためにメッセージ でページを更新するために、私は必要なときに、現在のページに表示されるメッセージのリストを望んでいたので、私は、関連するHTMLページ内の空の番号なしリスト(messages)を持っています、それは順番に指定されたdiv(message-pane)の中に座っています。更新の仕組みを示すコードスニペット(jQMで必要とされるrefresh呼び出しに注意してください)。あなたのajaxハンドラからこのようなコードをトリガすることができます:

var list = $("#messages"); 
list.append('<li>YOUR MESSAGE HERE</li>'); 
list.listview('refresh'); 
$("#message-pane").show(); 
+0

ええ、私のような何かを考えて、最高になるでしょう。同じページの更新について言及するとき、これを行うためにどのようなメカニズムを使用しましたか?現在私の意見は「全体」に返されます。私はJSONのリターンに更新されたhtmlを含めることができますが、jQuery Mobileを壊さずにDOMを更新する素晴らしい方法を考えることはできません。どうしたの? – Sergio

+0

@Sergio私はいくつかのサンプルコードで私の答えを更新しました。あなたが何をしているのですか? – Ben

+0

ああそうです。うん、それは私が知りたかったことだ。私はフォーム全体を返すことを考えていました。この方法はそのためには有効です。興味深いことに(サイドの問題のビット)私は考慮する必要があるかもしれないものとしてオフラインで作業するためにアプリケーションを構築する方法に興味を持っています。おそらく別の時間のために! – Sergio

関連する問題