2012-08-11 42 views
2

我試圖用backbone.js來管理測量邏輯。該應用程序旨在讓用戶開始回答問題並在任何給定時間繼續,因此需要保存進度。我有一個Question模型是相當標準:如何在backbone.js中同時享受持久性和集合的使用?

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可以讓我以一種看起來更加正確的方式來管理問題,因爲調查基本上是一組問題。兩種考慮之間的正確合併有什麼好的妥協?謝謝。

回答

0

我會保持你的問題模型。我還會創建一個與問題相關的答案模型。所以它會有屬性id,questionID,userID,answerChoice和時間戳。

當用戶進入您的調查時,我會獲取()他的答案並將其放入答案集合中。

由於答案是自己的模型,每次他們回答時,您都可以輕鬆地將其保存()到您的數據庫中。

然後,在你的答案集合中,我會有一個函數,它可以通過時間戳或問題ID檢索你想要的最新答案模型。我想這取決於你真正想要的。

我認爲這是你的意思是你的描述,但你怎麼看?

相關問題