Я застрял, пытаясь получить данные из связанного хранилища моделей.Позвольте мне дать краткий обзор того, чего я пытаюсь достичь.
Мне нужен Список тестов, и после нажатия на тест он покажет Список вопросов.После нажатия на вопрос вы получите соответствующие ответы с несколькими вариантами ответов (возможно, просмотр данных с помощью кнопок или другого списка).
В более ранней бета-версии я использовал хранилище плоских деревьев для отображения теста, но это было ограничение вэстетики и не позволили мне очень легко синхронизировать мои данные с API, и поэтому я пытаюсь заставить работать связанные модели вместо этого.Я обнаружил, что аналогичные проблемы в сети не могут полностью понять, что мне нужно.
Вот соответствующий код (в настройке MVC).У меня есть 3 связанные модели:
QuizModel.js:
app.models.QuizModel = Ext.regModel("QuizModel", {
fields: [
{ name: 'id', type: 'int' },
{ name: 'studentid', type: 'int' },
{ name: 'dateAllocated', type: 'string' },
{ name: 'category', type: 'string' },
],
associations: [
{type: 'hasMany', model: 'QuestionModel', name: 'questions'},
],
proxy: {
type: 'rest',
actionMethods: {create: "POST", read: "POST", update: "PUT", destroy: "DELETE"},
url: 'http://localhost/bm/core/api/quiz',
reader: {
type: 'json',
root: 'quizes'
}
}
});
app.stores.QuizStore = new Ext.data.Store({
model: "QuizModel",
storeId: 'quizStore'
});
QuestionModel.js:
app.models.QuestionModel = Ext.regModel("QuestionModel", {
fields: [
{ name: 'id', type: 'int' },
{ name: 'quizmodel_id', type: 'int'},
{ name: 'prompt', type: 'string' },
{ name: 'level', type: 'int' },
{ name: 'categoty', type: 'string' }
],
associations: [
{type: 'hasMany', model: 'AnswerModel', name: 'answers'},
{type: 'belongsTo', model: 'QuizModel'}
]
});
AnswerModel.js:
app.models.AnswerModel = Ext.regModel("AnswerModel", {
fields: [
{ name: 'id', type: 'int' },
{ name: 'questionmodel_id', type: 'int' },
{ name: 'prompt', type: 'string' },
{ name: 'correct', type: 'string' }
],
associations: [
{type: 'belongsTo', model: 'QuestionModel'}
]
});
QuizController.js:
app.controllers.QuizController = new Ext.Controller({
index: function(options) {
console.log('home');
},
quizTap: function(options){
var currentQuiz = app.stores.QuizStore.getAt(options.index);
var questions = currentQuiz.questions().load().getAt(0);
app.views.questionList.updateWithRecord(questions);
app.views.viewport.setActiveItem(
app.views.questionList, options.animation
);
}
});
и, наконец, мой ответ API остальных выглядит примерно так:
{
"status" : true,
"quizes" : [{
"id" : "1",
"category" : "Privacy",
"date_allocated" : "1329363878",
"questions" : [{
"id" : "1",
"prompt" : "Lorem ipsum dolor sit amet?",
"answers" : [{
"id" : "1",
"correct" : "1",
"prompt" : "yes"
},
{
"id" : "2",
"correct" : "0",
"prompt" : "no"
}]
}]
}]
}
В результате:
"UncaughtОшибка: вы используете ServerProxy, но не указали URL-адрес. ".
Теперь у моего QuizModel есть требуемый прокси-сервер для связи с моим REST API, но загрузка из вопросов (), похоже, используетпрокси по умолчанию.Я попытался настроить вызов загрузки с необходимыми параметрами (включая URL-адрес и необходимый ключ API), но это не работает.Кажется, я не могу найти какую-либо документацию о том, как я должен это делать, и большинство связанных постов говорят только о локальном хранилище.Пожалуйста, помогите!
изменить: добавив мой список просмотра вопросов:
BuddeMobile.views.QuestionList = Ext.extend(Ext.Panel, {
title: 'Quiz',
iconCls: 'quiz',
cls: 'question',
scroll: 'vertical',
initComponent: function(){
Ext.apply(this, {
dockedItems: [{
xtype: 'toolbar',
title: 'Quiz'
}],
items: [{
xtype: 'list',
itemTpl: '<div class="quiz-question">{prompt}</div>',
store: 'quizStore',
listeners: {
itemtap: function (list, index, el, e){
console.log('question tap',el);
}
}
}]
});
BuddeMobile.views.QuestionList.superclass.initComponent.call(this, arguments);
},
updateWithRecord: function(record) {
var toolbar = this.getDockedItems()[0];
toolbar.setTitle(record.get('category')); //works
var list = this.items.get(0);
console.log(record.questions()); //prints out mixed collection of questions
var question1 = record.questions().getAt(0); //testing
console.log(question1.answers()); //prints out mixed collection for first question's answers
list.update(record.questions()); //does not work. How can I populate the list??
}
});
Как вы можете видеть, я могу получить нужные мне данные (как я загружаю хранилище при входе в систему), но я нене знаю, как сделать список использовать подмножество данных.Я попробовал функцию обновления, но это мало что делает!