2011-06-30 15 views
4

私はdjangoで動作しているウェブサイトにjquery moblieフロントエンドを持っています。私は、何かが完了するまでに長い時間がかかるかもしれないユースケースを持っているので、私はユーザに、その進行状況を見てほしい。私の例では一連のイベントであり、成功か失敗かを示しています。jqueryモバイルと動的ページのコンテンツ

私はgeneratorこの情報を吐き出すオブジェクトを持っています。 HttpResponseオブジェクトにラップされ、更新のストリーミングの側面をフルフィルします。シンプルなWebページ(htmlタグとbodyタグ)は、期待通りに動作することを示しています。

しかし、jquery mobile(少なくともデフォルトで)はページを表示する前にページ全体を読み込むのが好きです。

この出力をダイアログとして表示しても構いません。

任意のアイデア?

答えて

0

私のこれまでの経験を更新するだけです。

最終的に私はほとんどの時間をjquery mobileで頭を掻き回していました。もちろん、もし私が前もってrtfmをしていたら、おそらくそれの中でもっと小さな頭痛があったでしょう!基本的にはajaxページの更新は面倒だったので、ここで重要なのはまたはdata-ajax="false"を私のhtmlのformで無効にすることです。また、#の使用方法のためにこれらのタグをこのページを読み込むページもあります(そうしないと、マルチページは正常に動作しません)。

次に、複数ページのjqmページを作成し、サブミットボタン(私の場合はdata-rel="dialog")とリンクし、2番目のページは空のiframeとします。私はフォームtargetをこのiframeとvoilaに設定しました!できます!フォームの提出によるストリーミング結果が必要に応じて表示されます。

ので、それを合計するには:引数がジェネレータオブジェクトです

  • ジャンゴのHttpResponseは、返されます。これにより出力のストリーミングが可能になります。

    <div id="main" data-role="page"> 
        <div data-role="content"> 
        <form id="myform" method="post" target="response-iframe" action="***django generator page***" data-ajax="false"> 
         ... 
         <a id="submit-button" href="#secondary" data-rel="dialog" data-role="button" data-theme="e">Submit</a> 
         <script> 
         $('#submit-button').live('click', function(){ 
          $('#port-form').submit() 
         }) 
         </script> 
        </form> 
        </div> 
    </div> 
    
    <div id="secondary" data-role="page"> 
        <div data-role="content"> 
        <iframe id="response-iframe"></iframe> 
        </div> 
    </div> 
    

  • はjqmページを作成します
    0

    通常のAJAXリクエストを使用して進捗状況の更新をDjangoにポーリングできます。

    jqueryモバイルとロングポーリングの問題は解決しませんが、長時間実行しているタスクをフロントエンドからバックエンドに置くために必要な柔軟性が得られます(たとえばCeleryを使用)。

    パフォーマンスを維持するために、長期実行タスクからmemcachedインスタンスへステータスを更新することをお勧めします。

    あなたのビューでは、進行状況を取得して戻ります。つまり、ダイアログボックスが表示されたり、一部のdivが更新されたりします。より良い - ただの結果。

    関連する問題