Javascript 在视图中创建新集合-Backbone.js
我正在编写一个简单的Backbone.js代码,该代码基于从JSON获取的配置创建练习 现在的流程是:Javascript 在视图中创建新集合-Backbone.js,javascript,backbone.js,underscore.js,backbone-views,backbone.js-collections,Javascript,Backbone.js,Underscore.js,Backbone Views,Backbone.js Collections,我正在编写一个简单的Backbone.js代码,该代码基于从JSON获取的配置创建练习 现在的流程是: 代码中的某种控制器获取JSON文件(通过jQuery) 我创建了描述模型(基于JSON文件的一部分),并通过迭代JSON文件中“answers”数组中的所有项,将它们添加到集合中,创建了一个应答集合 我基于模型和集合创建视图 所有这一切都在本文中进行了描述和解决 这是我的JSON文件的一部分,它是一个练习的配置 "config": { "id": "myWomiExercise1",
"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是正确的,x-y是不正确的,最后是随机的。
由于链接不适用于“何处”,我想知道这样做的最佳方式是什么?我的想法看起来很糟糕,就是考虑到了这一点:
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,然后正常渲染这个视图吗?还是有更好的方法
这让我很困惑,因为我需要一个控制按钮“new example”,它将重新创建集合(因为所有内容都是随机的,它应该提供全新的集合),但我需要销毁旧的集合吗?当用户点击一个按钮10次时,将会有大量的收集,这是最优的吗
谢谢大家,祝你们度过愉快的一天 首先,您确实意识到,如果用户单击“新示例”,他将立即知道正确答案,对吗?它将是唯一一个显示两次的 至于如何实现它,我将定义一个新的集合类型,它保存所有答案,并返回一个带有方法的集合。您可以在这里看到类似的实现:(参见FilteredCollection),它在中使用 在应用程序中使用它的方式是,过滤后的集合保存对原始联系人集合(所有数据)的引用,并在过滤后返回新集合。在您的例子中,您只需要使用一个
randomananswerset
函数,它返回一组答案,而不是上面文件中的filter
方法
希望这有帮助 用户看到第一组可能的答案:AXB(X是正确的答案)。他点击以获得一个新的示例,并看到XCD。因为每次都显示X,并且只能有一个正确答案,所以他知道X是答案。是的,但是可以有多个正确答案,因为getCorrect()返回集合中所有“correct”为true的答案数组,对吗?:)顺便说一句,谢谢你的答案,我马上测试:)好的,你说得对,问题是它总是以不同的顺序返回相同的对象,我不知道为什么…这个随机应答集中一定有什么地方出错了。你知道如何以最好的方式得到它吗?