8

我正在尝试使用PyBOSSA 框架在CrowdCrafting.org上建立一个项目。我按照他们的教程进行项目开发。第一部分对我来说似乎很清楚,创建项目和添加任务都很好。

然后我构建了自己的 HTML 网页来向用户展示任务。现在下一步是从项目中加载任务,将它们呈现给用户,并保存他们的答案。

不幸的是,我不明白如何做到这一点。

我将尝试提出一些问题以使您理解我的问题:

  1. 我怎样才能试试这个?唯一的方法似乎是更新代码然后运行​​pbs update_project
  2. 我在哪里可以找到PyBossa.js的文档?我刚刚看到(在教程和其他页面上)有一些函数,比如pybossa.taskLoaded(function(task, deferred){});pybossa.presentTask(function(task, deferred){});。但我不知道它们是如何工作的以及还有什么。这个页面看起来会包含一些文档,但它没有(断开的链接或空索引)。
  3. 我如何使用图书馆?我想 a) 加载任务,b) 将其呈现给用户,c) 向用户展示他的进度,以及 d) 发送答案。所以我想我必须调用 4 个不同的函数。但我不知道怎么做。

  1. 查看示例项目的代码,我不明白关于加载 disqus 的内容是什么。我认为 disqus 是一个论坛软件,但我不确定,我不知道这与我的项目(或他们的项目)有什么关系。

据我了解,JS 库的基本部分是:

pybossa.taskLoaded(function(task, deferred) {
  if ( !$.isEmptyObject(task) ) {
    deferred.resolve(task);
  }
  else {
      deferred.resolve(task);
  }
  });

  pybossa.presentTask(function(task, deferred) {
  if ( !$.isEmptyObject(task) ) {
      // choose a container within your html to load the data into (depends on your layout and on the way you created the tasks)
      $("#someID").html(task.info.someName);
      // by clickin "next_button" save answer and load next task
      $("#next_button").click( function () {
    // save answer into variable here
    var answer = $("#someOtherID").val();
    if (typeof answer != 'undefined') {
       pybossa.saveTask(task.id, answer).done(function() {
       deferred.resolve();
       });
    }
      });
   }
  else {
      $("#someID").html("There are no more tasks to complete. Thanks for participating in ... ");
  }
  });

  pybossa.run('<short name>');
4

1 回答 1

7

我将尝试一一回答您的观点:

  1. 您可以运行pbs update project或转到项目页面 > 任务 > 任务演示者并在那里编辑代码。

  2. 我相信这个链接有效,你应该在那里找到你想要的信息。

  3. 因此,一旦您创建了项目并添加了任务和演示器(您构建的 HTML),您应该在演示器本身中包含 Javascript 代码。您实际上只需要编写这两个函数:pybossa.taskLoaded(function(task, deferred){}); and pybossa.presentTask(function(task, deferred){});

    在第一个中,您必须在加载任务后但在准备好将其呈现给用户之前编写您想要发生的事情(例如,加载与任务相关的其他数据,而不是任务本身,例如图片来自外部网站)。完成后,您必须调用deferred.resolve(),这是告诉 pybossa.js 我们已完成任务负载的方法(无论是成功还是发生了一些错误)。

    之后,您必须为第二个(pybossa.presentTask)编写回调,在其中为您的任务设置所有内容,例如按钮答案提交的事件处理程序,这里是您应该放置用户完成任务的逻辑的地方本身,以及您应该在哪里调用pybossa.saveTask(). 同样,你应该最后调用 deferred.resolve() 来告诉 pybossa.js 用户完成了这个任务并呈现下一个任务。我建议您在 for 的回调中进行操作 pybossa.saveTask(task).done(callbackFunc()),因此请确保在正确保存当前任务后继续执行下一个任务。

  4. 您可以忘记讨论代码。这些只是提供的模板,其中包含一些代码以允许人们对任务进行评论。为此,使用了 Disquss,但是否要使用它取决于您,因此您可以安全地删除此代码。

于 2014-07-31T09:51:40.683 回答