1

我不太确定如何实现一个可以在多个请求之间共享其状态的模型。我的意思是一个包含一组数据的模型,而不仅仅是一个描述数据外观的模型。

一个示例是测验或调查,其中用户逐步完成几个问题,并且每个问题都通过子控制器中的下一个或上一个路由请求,其中用户的响应或选择的值将存储在模型中,并且仅在最后保存(到数据库或文件)。

我可以将模型注入 UfrontJSApplication,然后访问控制器中的每条路由,但我的 api 对此一无所知。我无法将它存储在 api 中,因为它会在每次新请求时重新创建。

这个想法是这样的:

class SurveyController extends Controller {

    @inject public var surveyApi:app.api.AsyncSurveyApi;
    @inject public var surveyModel:SurveyModel; // injected into UfrontJsApplication

    @:route("/nextQuestion")
    public function doNextQuestions(args: { index:Int } ) {
        surveyModel.add(/*an item from the post vars*/);

        return surveytApi.getNextQuestion(args.index) >> function(questionVO):ViewResult {
              return new ViewResult(questionVO) );
        }; 
    }

    //called after the last question via a button finish for example
    @:route("/saveSurvey")
    public function doSaveSurvey() {

        //save the entire model filled up by every doNextQuestion route
        return surveytApi.save(/*can't pass my model here*/) >> function(message):RedirectResult {
              return new RedirectResult(message) );
        }; 
    }
}

对此有什么想法吗?也许应该以完全不同的方式实施解决方案?

PS 也许至少有 1500 声望的人可以创建一个 'ufront' 标签?

4

3 回答 3

2

几个选项...

  1. 使用UFHttpSession。您可能需要创建一个在客户端工作的,但它可能只是一个非常简单的Map<String,Dynamic>. 您可以将半完成的调查保存到请求之间的会话中。

  2. 在每个请求上将模型保存到服务器 API,处于半完成状态。

  3. 如果您要继续构建调查客户端,则在发送到调查之前,您必须SurveyModel在请求之间进行持久化。你可以像你一样使用依赖注入来做到这一点,或者只是将它保存在你可以在请求之间访问的静态变量中。无论哪种方式,您都应该能够在您的doSaveSurvey()函数中访问模型,并将其发送到带有surveyApi.save(mySurvey).

    如果有问题,最好看看一些代码,看看它是什么SurveyModel样子SurveyApi的,以及错误消息是什么。

于 2015-05-20T07:45:53.300 回答
0

我认为最好的方法是在他询问更多问题时将答案保存在客户端上,然后通过 POST 路由提交所有内容,例如使用一对问题:响应:

@route(POST, "/saveSurvey")
public function doSaveSurvey(qapairs: Array<{q:Int, a:String}>) {
   for(pair in qapairs) {
        var question = pair.q;
        var answer = pair.a;
   }
}
于 2015-05-19T19:59:46.500 回答
0

我没有技术答案,但可能是指向何处查看的指针。

您应该查看电子学习标准,以了解他们如何建议实施吸吮模型:

  • 当前版本是 SCORM 2004(所有电子学习公司都使用)
  • 下一代是 xAPI(以前的 TinCan)

前者使用“SCORM API wrapper”(js)来存储数据,并根据应用程序请求将它们发送到“LMS”。它需要在线才能工作。

阶梯要灵活得多,允许离线存储,不需要 LMS……我还不太了解,但电子学习公司正在朝着它迈进。

您可以在此处找到有关标准的信息http://www.adlnet.gov/index.html#home-capabilities

注意:我认为您想要存储在 API 中的数据在电子学习世界中被称为“跟踪”。

希望它可以帮助你

于 2015-05-20T05:24:38.220 回答