2017-06-29 122 views
1

我目前正在爲我的PYBOSSA項目構建一個自定義任務展示器。我幾乎實現了它,但我被困在下面的JavaScript函數 -Pybossa JS - taskLoaded()函數在執行1個任務時執行兩次

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

你是一個很好的理由看到雙:-) PYBOSSA預加載下一個任務,所以最終用戶確實認爲,接下來的任務負載非常快(實際上是瞬間)。

雖然一些項目,這可能不是一個問題,在某些情況下,用戶需要下載大圖,查看其他API等,所以需要2〜3秒(甚至更多)呈現之前得到一切任務給用戶。

PYBOSSA.JS處理這種情況,只要數據已經被下載,它要求一個新的任務,但不是呈現它,你必須在你的窗口。在構建自己的模板時,必須將該數據添加到dom中(通過隱藏元素),然後在pybossa.presentTask方法中,您將檢查正在加載哪個任務,並顯示/隱藏前一個任務。

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

我希望現在更清楚。如果你不想這樣,你可以使用jQuery或Axios公司請求的任務,將其保存並加載下一個,當你想;-)

+0

但是我的每一個任務可以是圖像,視頻或音頻。每個任務可以有不同數量的問題。現在我打算用JS動態地將問題膨脹爲HTML。問題是兩個任務圖像都在膨脹。所以如果task1有3個問題,任務2有3個問題,Pybossa會將所有6個加載到DOM中。我如何確定哪些任務要膨脹,哪些不需要? – 97amarnathk

+0

正如我所說的,您需要添加一個div,span,任何你想要的dom,將自己標識爲圖像,視頻和相關任務的問題的容器。就如此容易。然後你顯示/隱藏你所需要的。 –

+0

我明白了。但是,我如何確定哪些元素屬於當前任務,哪些屬於下一個。 – 97amarnathk