我正在编写一个简单的Backbone.js代码,它根据从JSON获取的配置创建练习。
现在流程是:
所有这些都在this topic
中进行了描述和解决这是我的JSON文件的一部分,它是练习的配置。
"config": {
"id": "myWomiExercise1",
"type": "",
"numberOfSets": 0,
"numberOfPresentedAnswers": 3,
"numberOfCorrectAnswerInSet": 1,
"randomAnswers": true,
"exerciseTrueFalseType": false
},
这意味着,我可以在我的JSON中拥有30个答案,并且随机选择(通过使用下划线方法),以显示3(哪一个是正确的)。
我将配置传递给新视图,并通过添加到视图
来访问它initialize: function(options) {
this.options = options || {};
}
而且,我需要创建,正如我的配置所说(“randomAnswers”:true)新的答案集。 正如谷歌所说的那样,我可能需要使用下划线方法创建一个新的集合,通过组合它们中的一些 - 因为我需要的是,创建的集合将提供 x 的答案,从中 y 是正确的,并且 xy 不正确,并且最终,随机化。 由于链接不适用于'where',我想知道这样做的最佳方法是什么?我的想法看起来很差,在View中有这个:
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)));
},
还有一个问题,我应该创建一个新的集合,比如View中的randomAnswerSet,而不是正常渲染这个视图?或者有更好的方法来做到这一点?
它让我困惑,因为我需要一个控制按钮'新例子',它将重新创建集合(因为一切都是随机的,它应该提供完整的新集),但是我需要销毁旧的吗?当用户点击按钮10次时会有很多收集,是否最佳?
感谢所有人,祝大家有个美好的一天!
答案 0 :(得分: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
方法。
希望这有帮助!