Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在视图中创建新集合-Backbone.js_Javascript_Backbone.js_Underscore.js_Backbone Views_Backbone.js Collections - Fatal编程技术网

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

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",

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

现在的流程是:

  • 代码中的某种控制器获取JSON文件(通过jQuery)
  • 我创建了描述模型(基于JSON文件的一部分),并通过迭代JSON文件中“answers”数组中的所有项,将它们添加到集合中,创建了一个应答集合
  • 我基于模型和集合创建视图
  • 所有这一切都在本文中进行了描述和解决

    这是我的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是不正确的,最后是随机的。 由于链接不适用于“何处”,我想知道这样做的最佳方式是什么?我的想法看起来很糟糕,就是考虑到了这一点:

    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的答案数组,对吗?:)顺便说一句,谢谢你的答案,我马上测试:)好的,你说得对,问题是它总是以不同的顺序返回相同的对象,我不知道为什么…这个随机应答集中一定有什么地方出错了。你知道如何以最好的方式得到它吗?