【问题标题】:Creating new Collection in view - Backbone.js在视图中创建新集合 - Backbone.js
【发布时间】:2014-01-30 07:24:50
【问题描述】:

我正在编写一个简单的 Backbone.js 代码,它基于从 JSON 获取的配置创建练习。

现在的流程是:

  1. 我的代码中的某种控制器获取 JSON 文件(通过 jQuery)。
  2. 我创建了描述模型(基于我的 JSON 文件的一部分)和一个答案集合,方法是遍历 JSON 文件中“答案”数组中的所有项目,并将它们添加到集合中。
  3. 我根据模型和集合创建视图。

所有这些都在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


    【解决方案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 方法。

    希望这会有所帮助!

    【讨论】:

    • 用户看到第一组可能的答案:AXB(X 是正确答案)。他单击以获取新示例并查看 XCD。由于每次都显示X,而且只能有一个正确答案,所以他知道X就是答案。
    • 是的,但是可以有多个正确答案,因为 getCorrect() 返回集合中所有“正确”为真的答案的数组,对吗?:) 顺便说一句,谢谢你答案,我会在一秒钟内测试这个:)
    • 好吧,你是对的,问题主要是它总是返回相同的对象,以不同的顺序,我不知道为什么......这个randomAnswerSet中的东西一定是错误的。您知道如何以最佳方式获得它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多