我怎样才能在backbone.js中享受持久性和集合的使用?

时间:2012-08-11 17:53:24

标签: collections backbone.js persistence

我正在尝试使用backbone.js来管理调查逻辑。该应用程序旨在允许用户开始回答问题并在任何给定时间继续,因此需要保存进度。我有一个非常标准的Question模型:

App.Models.Question = Backbone.Model.extend({});

然后我想要一个Survey对象来记住上一个完成的问题。我的第一个倾向是把它写成模型,因为需要某种持久性:

App.Models.Survey = Backbone.Model.extend({
    defaults: {
        questions: [],
        currentIndex: 0
    },

    currentQuestion: function() { /*...*/ },
    nextQuestion:    function() { /*...*/ },
    prevQuestion:    function() { /*...*/ }
});

当我采用这种方法时,访问survey.get('questions')内的元素不会给我一个主干模型,而是一个简单的javascript对象 - 除非我用一组主干模型显式初始化它,这将是需要额外的解析并绕过骨干处理RESTful JSON的方式。

另一方面,使用集合而不是模型会给我模型实例,但是为集合保存某种持久性(currentIndex)似乎是不正确的,这不是为了管理数据。所以我有冲突 - 使用Backbone.Model可以让我保存用户获得的调查范围,而使用Backbone.Collection将允许我以一种看似更正确的方式管理问题,因为调查基本上是一系列问题。在两个考虑因素之间正确合并有什么好的妥协?感谢。

1 个答案:

答案 0 :(得分:0)

我会按原样保留你的问题模型。我还会创建一个与问题相关的答案模型。所以它将具有属性id,questionID,userID,answerChoice和timestamp。

当用户进入您的调查时,我会获取()他的答案并将其放入答案集合中。

由于答案是自己的模型,每次他们回答你都可以轻松地将()保存到你的数据库。

然后,在你的回答集合中,我有一个函数可以通过时间戳或questionID检索你想要的最新答案模型。我想这取决于你真正想要的东西。

我认为这就是你的描述,但你怎么看?