jsPsych与React集成

时间:2019-01-08 19:13:12

标签: reactjs import integration jspsych

我一直在尝试使用jsPsych创建一个自定义实验,该库用于运行行为实验,并在React容器中添加了自定义插件,但是我遇到了一些问题。

我想做的第一件事是使用makebrainwave的jspsych-react包,但是当我尝试运行示例时,必须在import节中更改文件的路径并替换为'fs'的使用之后,我仍然遇到此错误:

Trial level node is missing the "type" parameter. The parameters for the node are: {} experiment.js:924
TypeError: jsPsych.plugins[trial.type] is undefined[Learn More] experiment.js:1051

有人可以帮我吗?看来它正在尝试初始化某些内容并失败了,但否则我就迷失了错误。

第一个错误发生在构造函数中:


    // constructor
    var _construct = function() {
        // store a link to the parent of this node
        parent_node = parent;
        // create the ID for this node
        if (typeof parent == 'undefined') {
            relative_id = 0;
        } else {
            relative_id = relativeID;
        }
        // check if there is a timeline parameter
        // if there is, then this node has its own timeline
        if ((typeof parameters.timeline !== 'undefined') || (typeof jsPsych.plugins[trial_type] == 'function')) {
            // create timeline properties
            timeline_parameters = {
                timeline: [],
                loop_function: parameters.loop_function,
                conditional_function: parameters.conditional_function,
                sample: parameters.sample,
                randomize_order: typeof parameters.randomize_order == 'undefined' ? false : parameters.randomize_order,
                repetitions: typeof parameters.repetitions == 'undefined' ? 1 : parameters.repetitions,
                timeline_variables: typeof parameters.timeline_variables == 'undefined' ? [{}] : parameters.timeline_variables
            };
            self.setTimelineVariablesOrder();
            // extract all of the node level data and parameters
            var node_data = Object.assign({}, parameters);
            delete node_data.timeline;
            delete node_data.conditional_function;
            delete node_data.loop_function;
            delete node_data.randomize_order;
            delete node_data.repetitions;
            delete node_data.timeline_variables;
            delete node_data.sample;
            node_trial_data = node_data; // store for later...
            // create a TimelineNode for each element in the timeline
            for (var i = 0; i < parameters.timeline.length; i++) {
                timeline_parameters.timeline.push(new TimelineNode(Object.assign({}, node_data, parameters.timeline[i]), self, i));
            }
        }
        // if there is no timeline parameter, then this node is a trial node
        else {
            // check to see if a valid trial type is defined
            var trial_type = parameters.type;
            if (typeof trial_type == 'undefined') {
                console.error('Trial level node is missing the "type" parameter. The parameters for the node are: ' + JSON.stringify(parameters));
            } else if ((typeof jsPsych.plugins[trial_type] == 'undefined') && (trial_type.toString().replace(/\s/g,'') != "function(){returntimeline.timelineVariable(varname);}")) {
                console.error('No plugin loaded for trials of type "' + trial_type + '"');
            }
            // create a deep copy of the parameters for the trial
            trial_parameters = Object.assign({}, parameters);
        }
    }();

以及以下功能的第一行中的第二个


    function setDefaultValues(trial){
        var trial_parameters = Object.keys(jsPsych.plugins[trial.type].info.parameters);
        for(var i=0; i<trial_parameters.length; i++){
            if(typeof trial[trial_parameters[i]] == 'undefined' || trial[trial_parameters[i]] === null){
                if(typeof jsPsych.plugins[trial.type].info.parameters[trial_parameters[i]].default == 'undefined'){
                    console.error('You must specify a value for the '+trial_parameters[i]+' parameter in the '+trial.type+' plugin.');
                } else {
                    trial[trial_parameters[i]] = jsPsych.plugins[trial.type].info.parameters[trial_parameters[i]].default;
                }
            }
        }
    }

我将jspsych-reactyarn安装到项目中,并且测试容器如下:


    import React, { Component } from 'react'
    import { Experiment } from "jspsych-react";
    import { visualOddball } from "./examples/timelines/visualOddball";
    import { callbackHTMLDisplay } from "./examples/plugins/callbackHTMLDisplay";
    import { callbackImageDisplay } from "./examples/plugins/callbackImageDisplay";

export default class ExperimentComponent extends Component {
    render() {
        return (
            &lt;div&gt;
                &lt;Experiment
                    settings={{ timeline: visualOddball }}
                    plugins={{
                        "callback-html-display": callbackHTMLDisplay,
                        "callback-image-display": callbackImageDisplay
                    }}
                /&gt;
            &lt;/div&gt;
        );
    }
}

有人在不使用jspsych-react软件包的情况下集成了类似的东西吗?您采取了哪种方法?

谢谢!

0 个答案:

没有答案