2011-06-30 193 views
4

我有一个jquery moblie前端运行的网站与Django。我有一个用例可能需要很长时间才能完成,所以我希望用户看到它的进展情况;在我的例子中,这是一系列事件,它们是否成功/失败。jquery移动和动态页面内容

在后台我有一个generator对象,吐出这个信息。它围绕着一个HttpResponse对象,以充实更新的流式方面。一个简单的网页(只是HTML和身体标签)表明,它按预期工作。但是,jquery mobile(至少默认情况下)喜欢在显示它之前加载整个页面。

我不介意将此输出显示为对话框。

有什么想法?

回答

0

只是为了更新我对此的体验。

所以最后我花了我大部分时间用jquery mobile抓我的脑袋。当然,如果我事先做了rtfm'd,我可能会有一个更小的头痛!基本上ajax页面更新只是简单的烦人,所以这里最重要的是在我的html form上使用rel="external"data-ajax="false"来禁用它们 - 并且,由于#的使用方式,您还需要将这些标记添加到任何页面加载此页面也(否则多页将无法正常工作)。

然后我创建了一个多页的jqm页面,并通过我的提交按钮(在我的情况下为data-rel="dialog")链接到它,第二页用空的iframe;我把表格target设置为这个iframe,瞧!有用!来自表单提交的流式结果显示为应该显示。

这样来概括:

  • 的Django的HttpResponse返回,其中它的参数是一个生成器对象。这使输出的流式性质成为可能。
  • 创建JQM页面:

    <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> 
    

0

您可以使用通常的AJAX请求轮询Django进度更新。

它不能解决jquery移动和长轮询问题,但它为您提供了灵活性,使您将长期运行的任务从前端转移到后端(例如使用Celery)。

为了保持性能,我建议将状态从长时间运行的任务更新到memcached实例。

在你的视图中,只需获取进度并返回即会触发对话框或更新某个div的进度。更好 - 只是结果。