Ufront - 在多个请求之间使用模型(保存数据)

时间:2015-05-19 13:04:25

标签: haxe ufront

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

一个例子是一个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名声誉的人可以创造一个“前沿”的声音。标签?

3 个答案:

答案 0 :(得分:2)

一些选择......

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

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

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

    如果出现问题,最好看一些SurveyModelSurveyApi的代码,以及错误信息是什么。

答案 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 2004(由所有电子学习公司使用)
  • 下一代是xAPI(原为TinCan)

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

梯子更灵活,允许离线存储,不需要LMS ......我不太了解它,但电子学习公司正朝着它发展。

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

注意:我认为您希望存储在API中的数据在电子学习领域称为“跟踪”。

希望它可以帮到你