Ufront-使用几个请求之间的模型(持有数据)



我不确定如何实现可以在几个请求之间共享其状态的模型。我的意思是一个模型,它拥有一组数据,不仅是描述数据的样子。

的模型。

一个示例是一个测验或调查,用户逐步介绍了几个问题,并且每个问题都是通过子controller中的下一个或上一条路线请求的,在该子controller中,用户的响应或所选值将存储在模型中只有在末尾保存(到DB或文件)。

我可以将模型注入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) );
        }; 
    }
}

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

P.S。也许至少有1500名声誉的人可以创建一个" Ufront"标签?

一些选项...

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

  2. 将模型保存到每个请求上的服务器API,在一半的状态下。

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

    如果有问题,最好看到SurveyModelSurveyApi的某些代码,以及错误消息是什么。

我认为最好的方法是在客户提出更多问题时保存答案,然后通过邮局全部提交,例如使用一对问题:响应:

@route(POST, "/saveSurvey")
public function doSaveSurvey(qapairs: Array<{q:Int, a:String}>) {
   for(pair in qapairs) {
        var question = pair.q;
        var answer = pair.a;
   }
}

我没有技术答案,但也许是指向何处看的指针。

您应该研究电子学习标准,以查看他们如何提出吮吸模型的实现:

  • 当前的Gen is scorm 2004(所有电子学习公司都使用)
  • 下一个Gen是XAPI(以前为Tincan)

前者使用" SCORM API包装器"(JS)存储数据并将其发送到应用程序请求上的" LMS"。它需要在线工作。

梯子更加灵活,允许离线存储,不需要LMS ...我还不太了解,但是电子学习公司正在朝它迈进。

您可以在此处找到有关标准的信息

nb:我认为您要存储在API中的数据在电子学习世界中称为"跟踪"。

希望它可以帮助您

最新更新