私はKnockoutjsでクイズをデザインしています。私は一度に一つの質問しか表示しません。私は質問に答えられるたびに1ずつ追加されるグローバルカウントvarについて考えていました。しかし、私はその時に一つの質問だけを得る方法を見つけることができないようです。 これに最も接近するにはどうすればよいですか?私はKnockoutjsの新人です。私は質問をしましたが、それはうまくいかないようです。observableArrayからオブジェクトをインデックスで取得する
おかげ
JS
$(document).ready(function(){
function Answer(data) {
this.answer = ko.observable(data.answer);
this.correct = ko.observable(data.correct);
}
function Question(data){
this.id = ko.observable(data.id);
this.question = ko.observable(data.question);
this.answers = ko.observableArray([]);
var mappedAnswers = $.map(data.answers, function(item) {return new Answer(item) });
this.answers(mappedAnswers);
}
function AnswerViewModel(){
// Data
var self = this;
self.questions = ko.observableArray([]);
self.checkAnswer = function(item, event){
if (item.juist() == true){
$(event.currentTarget).css("background", "green");
}else{
$(event.currentTarget).css("background", "red");
}
}
$.getJSON("../res/json/quiz.json", function(allData) {
var mappedQuestions = $.map(allData.questions, function(item) {return new Question(item) });
self.questions(mappedQuestions);
});
}
ko.applyBindings(AnswerViewModel());
});
HTML
<h3 data-bind="questions()[1].question"></h3>
<ul class="list-container" data-bind="foreach: questions()[1].answers">
<li class="list-item">
<a class="list-item-content" href="#" data-bind="text: answer, click:checkAnswer"></a>
</li>
</ul>
<button>Next question</button>
JSON
{
"questions" :
[
{
"id": 1,
"question": "This is the first question",
"answers" :
[
{"answer": "q1a1", "correct": false},
{"answer": "q1a2", "correct": false} ,
{"answer": "q1a3", "correct": true},
{"answer": "q1a4", "correct": false}
]
},
{
"id": 2,
"question": "This is the 2nd question",
"answers" :
[
{"answer": "q2a1", "correct": false},
{"answer": "q2a2", "correct": false} ,
{"answer": "q2a3", "correct": false},
{"answer": "q2a4", "correct": true}
]
}
]
}
返信いただきありがとうございます!私はあなたにこれをよく説明する時間がかかったことに本当に感謝しています。 私はそれを試しましたが、悲しいことに何も表示されません。私が間違っている何か他にありますか? – MrJM
私は自分のコードでいくつかの間違いを犯しました。疑問ではなく 'self.questions()'です。次の質問では、 'self.currentQuestionId(parseInt(currentQuestionId、10)+ 1);'のようなparseIntが必要です。ここにcodepen - http://codepen.io/jjperezaguinaga/full/jIytF – jjperezaguinaga
それはうまくいく、ありがとう! – MrJM