1

我目前正在为我的 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

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

4

1 回答 1

2

您看到 double 是有充分理由的 :-) PYBOSSA 预加载下一个任务,因此最终用户确实认为下一个任务加载得非常快(实际上是立即加载)。

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

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

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

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

于 2017-06-30T14:35:56.060 回答