2012-11-24 165 views
2

我正在學習如何使用Backbone和Parse創建一個調查網站。 我見過堆棧溢出的類似問題。不過,我的問題有點不同。 在本網站上,用戶可以進行自己的調查。現在假設用戶可以發佈兩種類型的問題:多種選擇和自由迴應。我創建了一個名爲Question的骨幹模型,如下所示。骨幹:一個模型兩個視圖?

//問題型號

//---------------------- 
var Question = Parse.Object.extend(
"Question", { 
//Default attributes for the todo 
defaults: { 
    content: "What's your name", 
    type: "free_response", 
    choices: [] 
}, 
initialize: function() { 
     if (!this.get("content")) { 
       this.set({"content": this.defaults.content}); 
    } 
     if (!this.get("type")) { 
       this.set({"type": this.defaults.type}); 
    } 
     if (!this.get("choices")) { 
       this.set({"choices": this.defaults.choices}); 
    } 
} 

}); 

所以我也想創建QuestionView可顯示的問題。但它應該有不同的選擇和自由迴應。 那麼根據其類型顯示不同的問題的最佳方式是什麼? 謝謝。

+1

你爲什麼手動應用的默認值?在'defaults'中使用數組可能會導致問題,如果要包含可變值,則應該爲'defaults'使用函數。 –

+0

是的,我確實遇到了數組問題,它似乎沒有做我所期望的(這是我可以追加項目到數組)。通過使用函數進行默認值,你的意思是什麼? – user1849043

+0

您可以使用函數['defaults'](http://backbonejs.org/#Model-defaults)而不是對象:'defaults:function(){return {...}}'。這會給你一個不同的模型默認設置。 –

回答

0

在你questionView模板添加一個if聲明:

<script type="template/underscore" id="QuestionView"> 
<%- content %> 
<% if (type === 'free_response') { %> 
<textarea name="answer<%- id %>"></textarea> 
<% } else { _(choices).each(function (choice) { %> 
<input type="radio" name="answer<%- id %>" value="<%- choice %>"> <%- choice %> 
<% });} %> 
</script> 

更多關於如何使用下劃線模板見: http://documentcloud.github.com/underscore/#template

+0

非常感謝!你的建議非常有幫助! – user1849043

+0

對不起,你可以進一步解釋一下這一行:?謝謝! – user1849043

+0

我的意思是我不完全確定什麼名稱=「回答<%- id %>」。是否用於稍後檢索用戶的答案? – user1849043

相關問題