在视图中创建新集合 - Backbone.js

时间:2014-01-30 07:24:50

标签: javascript backbone.js underscore.js backbone-views backbone-collections

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

现在流程是:

  1. 我的代码中的某种控制器获取JSON文件(通过jQuery)。
  2. 我通过迭代JSON文件中“answers”数组中的所有项目并将它们添加到集合中来创建描述模型(基于我的JSON文件的一部分)和答案集合。
  3. 我基于模型&创建视图集合。
  4. 所有这些都在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次时会有很多收集,是否最佳?

    感谢所有人,祝大家有个美好的一天!

1 个答案:

答案 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方法。

希望这有帮助!