我不确定如何实现可以在几个请求之间共享其状态的模型。我的意思是一个模型,它拥有一组数据,不仅是描述数据的样子。
的模型。一个示例是一个测验或调查,用户逐步介绍了几个问题,并且每个问题都是通过子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"标签?
一些选项...
-
使用ufhttpsession。您可能需要创建一个可工作的客户端,但这可能只是一个非常简单的
Map<String,Dynamic>
。您可以将半完成的调查保存到介于请求之间的会话中。 -
将模型保存到每个请求上的服务器API,在一半的状态下。
-
如果您要保留调查客户端的构建,则在发送调查之前,必须在请求之间持续
SurveyModel
。您可以像拥有的依赖项注入一样,或者仅将其保存在可以在请求之间访问的静态变量中。无论哪种方式,您都应该能够访问doSaveSurvey()
函数中的模型,并使用surveyApi.save(mySurvey)
发送到API。如果有问题,最好看到
SurveyModel
和SurveyApi
的某些代码,以及错误消息是什么。
我认为最好的方法是在客户提出更多问题时保存答案,然后通过邮局全部提交,例如使用一对问题:响应:
@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中的数据在电子学习世界中称为"跟踪"。
希望它可以帮助您