如何使用骨干更新文件上传消息?

时间:2013-02-18 08:42:22

标签: file-upload backbone.js asynchronous backbone-views q

我使用javascript上传多个文件。

上传文件后,我需要运行多个处理函数。

由于需要处理时间,我需要在前面的UI告诉用户预计整个过程剩余的时间。

基本上我有3个功能:

  1. / upload - 这是用于上传文件的端点
  2. / generate / metadata - 这是在/ upload
  3. 之后应该触发的下一个端点
  4. / process - 这是最后一个端点。应该在/ generate / metadata
  5. 之后触发

    这就是我期望屏幕基本上看起来的样子。

    enter image description here

    应显示剩余百分比和剩余时间等信息。

    但是,我不确定是否允许服务器提供信息,或者我只使用javascript进行hackish估算。

    我还需要更新屏幕,比如告诉用户消息,例如

    “目前正在上传”

    如果我在功能1。

    如果我在功能2处“生成元数据”。

    “处理......”如果我在功能3。

    功能2仅在成功完成1后发生。

    功能3仅在成功完成2后才会出现。

    我已经在使用q.js承诺来处理这方面的一些部分,但代码却变得非常混乱。

    我最近遇到了Backbone,它允许结构化的方式处理单页应用程序行为,这就是我想要的。

    我没有问题,服务器端返回json响应以确定端点是成功还是失败。

    我想知道使用Backbone.js

    实现此功能的好方法

2 个答案:

答案 0 :(得分:2)

您可以使用“进度”文件或DB条目来存储后端进程的状态。让后端进程定期更新此文件。例如,将其写入文件:

{"status": "Generating metadata", "time": "3 mins left"}

用户提交文件后,前端开始使用简单的ajax调用和setTimeout ping后端progress函数。 progress函数将只打开此文件,获取JSON格式的状态信息,然后更新前端进度条。

您可能希望将ajax调用附加到您的模型上。让您的前端视图监视status的更改并相应更新(例如进度条)。

答案 1 :(得分:0)

长轮询请求: Polling request for updating Backbone Models/Views

基本上,当您上传文件时,您将为每个给定文件分配“FileModel”。 FileModel将每N秒启动一次长轮询请求,直到状态为“完成”。