我不太确定如何实现一个可以在多个请求之间共享其状态的模型。我的意思是一个模型,它包含一组数据,而不仅仅是描述数据外观的模型。
一个例子是一个quizz或调查,其中用户逐步解决几个问题,并通过子控制器中的下一个或上一个路径请求每个问题,其中用户的响应或选定值将存储在模型中并且只在最后保存(到数据库或文件)。
我可以将模型注入到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名声誉的人可以创造一个“前沿”的声音。标签?
答案 0 :(得分:2)
一些选择......
使用UFHttpSession。您可能需要创建一个适用于客户端的方法,但它可能只是一个非常简单的Map<String,Dynamic>
。您可以在请求之间将半完成的调查保存到会话中。
在每个请求中将模型保存到服务器API,处于半完成状态。
如果您要继续建立调查客户端,在发送到调查之前,您必须在请求之间保持SurveyModel
。您可以像使用依赖注入一样执行此操作,或者只是将其保存在可以在请求之间访问的静态变量中。无论哪种方式,您都应该能够访问doSaveSurvey()
函数中的模型,并使用surveyApi.save(mySurvey)
将其发送到API。
如果出现问题,最好看一些SurveyModel
和SurveyApi
的代码,以及错误信息是什么。
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
我没有技术答案,但可能是指向哪里看的指针。
你应该研究一下电子学习标准,看看他们如何提出吮吸模型的实施:
前者使用“SCORM API包装器”(js)来存储数据并将其发送到应用程序请求的“LMS”。它需要在线才能工作。
梯子更灵活,允许离线存储,不需要LMS ......我不太了解它,但电子学习公司正朝着它发展。
您可以在此处找到有关标准的信息http://www.adlnet.gov/index.html#home-capabilities
注意:我认为您希望存储在API中的数据在电子学习领域称为“跟踪”。
希望它可以帮到你