【发布时间】:2014-01-30 07:24:50
【问题描述】:
我正在编写一个简单的 Backbone.js 代码,它基于从 JSON 获取的配置创建练习。
现在的流程是:
- 我的代码中的某种控制器获取 JSON 文件(通过 jQuery)。
- 我创建了描述模型(基于我的 JSON 文件的一部分)和一个答案集合,方法是遍历 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 是正确的,x-y 是不正确的,最后是随机的。 由于链接不适用于“位置”,我想知道这样做的最佳方法是什么?我的想法,看起来很糟糕,在 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 次时会有很多收集,是最优的吗?
谢谢大家,祝你有美好的一天!
【问题讨论】:
标签: javascript backbone.js underscore.js backbone-views backbone.js-collections