我正在使用 Ember 创建一个分析器应用程序(就像您有时会在杂志上获得的个性测验之一)。它提出了一系列 10 个问题,每个问题有 7 个多项选择答案,每个答案都有不同的分配分数。每个响应的总分是 100 分。用户最终将能够存储他们的答案,以便他们以后可以重做,看看他们是否有所改进。
但是对于 Ember(非常)新手,我一直坚持收集和存储用户响应作为单独的记录。
我的问题是我使用 QuestionsController 从 Fixture(问题)中加载问题,以及它可能的 Answer(单独的相关 Fixture)。
因此,当有人点击答案时(例如,使用按钮,但当我想通了它时,我可能会使用单选按钮),它正在捕获他们的响应......但接下来我该怎么做呢?
我认为最好的方法是有一个单独的 ResponseController 来创建单个响应的记录(然后我可以总计),但是 Ember 期望捕获的响应由 QuestionsController 处理,而不是 ResponseController(这是我认为应该正在做)。
我似乎无法理解如何做到这一点,尤其是 Ember 的所有不同部分如何组合在一起并跨控制器交互。
Javascript
// Models
App.Question = DS.Model.extend ({
label: DS.attr('string'),
answers: DS.hasMany('App.Answer')
});
App.Answer = DS.Model.extend ({
question: DS.belongsTo('App.Question'),
label: DS.attr('string'),
value: DS.attr('number')
});
App.Response = DS.Model.extend ( {
question: DS.attr('string'), // Question_id that was responded to
score: DS.attr('number'), // The score of the selected answer
answer: DS.belongsTo('App.Answer') // The answer
});
// Controllers
App.QuestionsController = Ember.ArrayController.extend( {
select: function( question, score, answer ) {
// this next bit is clearly not right, but I don't know why...
App.Response.storeResponse( question, score, answer );
}
});
App.ResponseController = Ember.ObjectController.extend( {
storeResponse: function( question, score, answer ) {
// this next bit is clearly not right, but I don't know why.
createRecord ( { question: question, score: score, answer: answer } );
}
});
的HTML
<!-- The Template for the Questionnaire -->
<script type="text/x-handlebars" id='questions'>
<H2>Questions</H2>
{{#each question in controller}}
<div><span>{{question.id}}</span> {{question.label}}</div>
<div>{{partial "answer"}}</div>
{{/each}}
</script>
<!-- The Template for the Answers -->
<script type="text/x-handlebars" id='_answer'>
<ul>
{{#each answer in question.answers}}
<li><button {{ action "select" question.id answer.value answer.id }}{{answer.label}}</li></button></li>
{{/each}}
</ul>
</script>
进步
我的模板工作正常;它正确显示问题和答案(或至少如我所料)。该按钮正在捕获正确的响应。但我真的不知道如何将数据从那里获取到存储中。
我在控制台中得到的响应各不相同(取决于我尝试解决的问题)从“未定义”到“找不到变量 storeResponse”。