Ufront - 在多个请求之间使用模型(保存数据)
Ufront - using a model (which holds data) between several requests
我不太确定如何实现可以在多个请求之间共享其状态的模型。我的意思是一个包含一组数据的模型,而不仅仅是一个描述数据外观的模型。
一个例子是测验或调查,其中用户逐步完成几个问题,每个问题都是通过子控制器中的下一个或上一个路径请求的,其中用户的响应或选择的值将存储在一个模型,只在最后保存(到数据库或文件)。
我可以将模型注入 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' 标签?
我认为最好的方法是在客户提出更多问题时将答案保存在客户身上,然后通过 POST 路线提交所有答案,例如使用一对 question:response:
@route(POST, "/saveSurvey")
public function doSaveSurvey(qapairs: Array<{q:Int, a:String}>) {
for(pair in qapairs) {
var question = pair.q;
var answer = pair.a;
}
}
我没有技术性的答案,但也许可以找到一个参考点。
您应该查看电子学习标准,了解他们如何建议实施糟糕的模型:
- 当前版本是 SCORM 2004(所有电子学习公司都使用)
- 下一代是 xAPI(以前的 TinCan)
前者使用一个"SCORM API wrapper"(js)来存储数据并在应用程序请求时将它们发送到一个"LMS"。它需要在线才能工作。
阶梯更灵活,允许离线存储,不需要 LMS...我还不是很了解,但电子学习公司正在朝着它迈进。
您可以在此处找到有关标准的信息http://www.adlnet.gov/index.html#home-capabilities
注意:我认为您要存储在 API 中的数据在电子学习世界中称为 "tracking"。
希望对您有所帮助
几个选项...
使用一个UFHttpSession。您可能需要创建一个可以在客户端运行的工具,但它可能只是一个非常简单的 Map<String,Dynamic>
。您可以将完成一半的调查保存到请求之间的会话中。
在每次请求时将模型保存到服务器 API,处于半完成状态。
如果您要继续构建调查客户端,在发送到调查之前,您必须使 SurveyModel
在请求之间保持不变。您可以像您一样使用依赖注入来做到这一点,或者只是将它保存在一个您可以在请求之间访问的静态变量中。无论哪种方式,您都应该能够在 doSaveSurvey()
函数中访问模型,并使用 surveyApi.save(mySurvey)
.
将其发送到 API
如果这有问题,最好看看 SurveyModel
和 SurveyApi
的代码,以及错误消息是什么。
我不太确定如何实现可以在多个请求之间共享其状态的模型。我的意思是一个包含一组数据的模型,而不仅仅是一个描述数据外观的模型。
一个例子是测验或调查,其中用户逐步完成几个问题,每个问题都是通过子控制器中的下一个或上一个路径请求的,其中用户的响应或选择的值将存储在一个模型,只在最后保存(到数据库或文件)。
我可以将模型注入 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' 标签?
我认为最好的方法是在客户提出更多问题时将答案保存在客户身上,然后通过 POST 路线提交所有答案,例如使用一对 question:response:
@route(POST, "/saveSurvey")
public function doSaveSurvey(qapairs: Array<{q:Int, a:String}>) {
for(pair in qapairs) {
var question = pair.q;
var answer = pair.a;
}
}
我没有技术性的答案,但也许可以找到一个参考点。
您应该查看电子学习标准,了解他们如何建议实施糟糕的模型:
- 当前版本是 SCORM 2004(所有电子学习公司都使用)
- 下一代是 xAPI(以前的 TinCan)
前者使用一个"SCORM API wrapper"(js)来存储数据并在应用程序请求时将它们发送到一个"LMS"。它需要在线才能工作。
阶梯更灵活,允许离线存储,不需要 LMS...我还不是很了解,但电子学习公司正在朝着它迈进。
您可以在此处找到有关标准的信息http://www.adlnet.gov/index.html#home-capabilities
注意:我认为您要存储在 API 中的数据在电子学习世界中称为 "tracking"。
希望对您有所帮助
几个选项...
使用一个UFHttpSession。您可能需要创建一个可以在客户端运行的工具,但它可能只是一个非常简单的
Map<String,Dynamic>
。您可以将完成一半的调查保存到请求之间的会话中。在每次请求时将模型保存到服务器 API,处于半完成状态。
如果您要继续构建调查客户端,在发送到调查之前,您必须使
将其发送到 APISurveyModel
在请求之间保持不变。您可以像您一样使用依赖注入来做到这一点,或者只是将它保存在一个您可以在请求之间访问的静态变量中。无论哪种方式,您都应该能够在doSaveSurvey()
函数中访问模型,并使用surveyApi.save(mySurvey)
.如果这有问题,最好看看
SurveyModel
和SurveyApi
的代码,以及错误消息是什么。