0

Я пишу простой код Backbone.js, который создает упражнение на основе конфигурации, выбранной из JSON.Создание новой коллекции in view - Backbone.js

Поток теперь:

  1. Какой-контроллер в моем коде ПОЛУЧИТЬ JSON файл (с помощью JQuery).
  2. Я создаю модель описания (основанную на части моего файла JSON) и сборки ответов, итерируя все элементы в массиве ответов в файле JSON и добавляя их в коллекцию.
  3. Я создаю виды, основанные на модели & коллекция.

Все это было описано и решена в this topic

Это часть моего файла JSON, который является конфигурацией для упражнений.

"config": { 
    "id": "myWomiExercise1", 
    "type": "", 
    "numberOfSets": 0, 
    "numberOfPresentedAnswers": 3, 
    "numberOfCorrectAnswerInSet": 1, 
    "randomAnswers": true, 
    "exerciseTrueFalseType": false 
}, 

Это означает, что я могу иметь, например, 30 ответов в моей JSON, и будет выбран случайным (с использованием методов подчеркивания, возможно), чтобы показать 3 (который один является правильной).

проходит конфигурацию нового View, и иметь доступ к нему, добавив к мнению

initialize: function(options) { 
    this.options = options || {}; 
} 

И чем, мне нужно создать, так как мой конфиг говорит («randomAnswers»: истина) новый набор ответы. Как мне сказал google, мне, вероятно, нужно создать новую коллекцию с использованием меток подчеркивания, объединив несколько из них - потому что мне нужно, набор создан, который будет содержать x ответов, из которых y будет верным, и xy неправильный, и finnaly, рандомизированный. Поскольку цепочка не работает с «где», мне интересно, что это лучший способ сделать это? Моя идея, которая выглядит довольно бедным имея это в виду:

randomAnswerSet: function(config) { 
    var correct = config.numberOfCorrectAnswerInSet; 
    var wrong = config.numberOfPresentedAnswers - correct; 
    var set = []; 
    set.push(
     _.sample(this.collection.getCorrect(), correct) 
    ); 
    set.push(
     _.sample(this.collection.getWrong(), wrong) 
    ); 

    this.collection = new AnswersCollection(_.shuffle(_.flatten(set))); 
}, 

И еще один вопрос, я должен создать новую коллекцию, как этот randomAnswerSet в поле зрения и чем сделать этот вид нормально? Или есть лучшие способы сделать это?

Это меня смущает, потому что мне нужна кнопка управления «новый пример», которая воссоздает коллекцию (поскольку все рандомизировано, она должна давать совершенно новый набор), но мне нужно уничтожить старый? Будет много сбора, когда пользователь будет нажимать кнопку 10 раз, это оптимально?

Спасибо, ребята, за всех и у нас отличный день!

ответ

1

Прежде всего, вы понимаете, что если пользователь нажмет «новый пример», он сразу же узнает правильный ответ, верно? Он будет единственным, который будет отображаться дважды ...

Что касается его реализации, я бы определил новый тип коллекции, который содержит все ответы и возвращает набор с помощью метода. Вы можете увидеть подобную реализацию здесь: https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/entities/common.js (см FilteredCollection), который используется в https://github.com/davidsulc/marionette-gentle-introduction/blob/master/assets/js/apps/contacts/list/list_controller.js

Как это используется в приложении является то, что отфильтрованная коллекция содержит ссылку на оригинальную коллекцию контактов (все данные) и возвращает новую коллекцию при ее фильтрации.В вашем случае у вас просто есть функция randomAnswerSet, которая возвращает группу ответов вместо метода filter в приведенных выше файлах.

Надеюсь, это поможет!

+0

Для первой части о правильном ответе - почему? – user1854236

+0

Пользователь видит первую группу возможных ответов: AXB (при правильном ответе X). Он нажимает, чтобы получить новый пример и видит XCD. Поскольку X отображается каждый раз, и может быть только один правильный ответ, он знает, что X является ответом. –

+0

Yeap, но может быть несколько правильных ответов, так как getCorrect() возвращает массив всех ответов, «правильный» является истинным в коллекции, я прав? :) Кстати, спасибо за ваш ответ, я проверю это в секунду :) – user1854236

Смежные вопросы