Pybossa JS - taskLoaded()函数在获取1个任务

时间:2017-06-29 06:59:29

标签: javascript ajax pybossa

我目前正在为我的PYBOSSA项目构建自定义任务演示者。我几乎实现了它,但我坚持使用以下javascript函数 -

pybossa.taskLoaded(function(task, deferred) {
    if ( !$.isEmptyObject(task) ) {
        console.log("Hello from taskLoaded");
        // load image from flickr
        var img = $('<img />');
        img.load(function() {
            // continue as soon as the image is loaded
            deferred.resolve(task);
            pybossaNotify("", false, "loading");
        });
        img.attr('src', task.info.url).css('height', 460);
        img.addClass('img-thumbnail');
        task.info.image = img;
        console.log("Task ##"+task.id);
    }
    else {
        deferred.resolve(task);
    }
});

根据文档 -

  

pybossa.taskLoaded方法将负责向JSON任务对象添加新项目并在加载数据后解析延迟对象(即已下载图像时),因此当前用户的另一项任务可以预先加载。

但请注意我的功能。我记录了任务ID,函数加载。它加载2个任务。记录后,控制台显示 -

Task ##256
Task ##257

我也尝试了其他各种陈述。他们也执行两次。我认为如果现在我尝试插入当前任务的问题,下一个任务的功能也将与其各自的图像一起放置。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你看到加倍是有充分理由的:-) PYBOSSA预加载下一个任务,所以最终用户确实认为下一个任务加载速度非常快(实际上是即时)。

虽然对于某些项目而言这可能不是问题,但在某些情况下,用户需要下载大图像,检查其他API等,因此在呈现任务之前需要2或3秒(甚至更多)来获取所有内容给用户。

PYBOSSA.JS处理这种情况,一旦下载了数据,它就会请求一个新任务,但不是出现它,而是在窗口中显示它。在构建自己的模板时,必须将该数据添加到dom中(通过隐藏元素),然后在pybossa.presentTask方法中,您将检查正在加载的任务,并显示/隐藏前一个任务。 / p>

在pybossa.saveTask中,您可以删除以前的DOM元素。

我希望现在更清楚了。如果您不想这样,您可以使用jQuery或Axios来请求任务,保存并在您需要时加载下一个任务; - )