2

我正在尝试使用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为集合保存某种持久性 ( ) 似乎是不正确的,这并不意味着管理数据。所以我很矛盾 - 使用 aBackbone.Model可以让我保存用户在调查中的进展情况,而 usingBackbone.Collection可以让我以一种看起来更正确的方式管理问题,因为调查基本上是问题的集合。在这两个考虑因素之间正确合并的一个好的折衷方案是什么?谢谢。

4

1 回答 1

0

我会保持你的问题模型不变。我还将创建一个与问题相关的答案模型。因此它将具有属性 id、questionID、userID、answerChoice 和时间戳。

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

由于答案是它自己的模型,因此每次他们回答时,您都可以轻松地将其 save() 到您的数据库中。

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

我认为这就是您的描述的意思,但是您怎么看?

于 2012-08-11T20:45:51.577 回答