Moodle公式中的JSXGraph具有两个功能块:绑定到输入字段不起作用

弗洛里安

我用两个板在运动学领域创建了一个Moodle公式问题。尽管我仅用一块板就可以顺利完成一些简单的问题,但是这个问题的问题是绑定值没有插入到公式的输入字段中。因此,学生无法提交答案,因为实际上没有填写任何内容。不过,问题的其余部分仍然有效,可以在问题的预览中填写正确的答案时看到。

我提供了一个Moodle XML文件,以使其更容易重现该问题:questions_formulas_JSXGraph_2boards.xml
您需要安装JSXGraph过滤器和问题类型的Moodle当前版本Formulas

JSXGraph的主要代码是这样的:

<jsxgraph width="400" height="300" numberOfBoards="2" ext_formulas>

// JavaScript code to create the construction.
var jsxCode = function (question) {
  
  // Import final coordinates after submission
  var x0={x0};
  var t1,t2,t3 , v1,v2,v3 , x1,x2,x3;
  [t1,t2,t3 , v1,v2,v3 , x1,x2,x3] = 
  question.getAllValues([1,2,3 , 1,2,3 , x0,x0,x0 ]);
  
  JXG.Options.point.infoboxDigits = 1;
  JXG.Options.point.snapSizeX = 1;
  JXG.Options.point.snapSizeY = 0.1;
  
  // Create boards
  var brd0 = JXG.JSXGraph.initBoard(BOARDID0, { 
    boundingbox: [-1, 11, 12, -11], axis:true,
    defaultAxes: {
      x: {withLabel: true, name: 't in s',
          label: {position: 'rt', offset: [-0, 15], anchorX: 'right'} },
      y: {withLabel:true, name: 'x in m',      
          label: {position: 'rt', offset: [+15, -0]} } },
      showCopyright: false, showNavigation: false 
    });
    
  var brd1 = JXG.JSXGraph.initBoard(BOARDID1, { 
    boundingbox: [-1, 3.5, 12, -3.5], axis:true,
    defaultAxes: {
      x: {withLabel: true, name: 't in s',
          label: {position: 'rt', offset: [-0, 15], anchorX: 'right'} },
      y: {withLabel:true, name: 'v_x in m/s',      
          label: {position: 'rt', offset: [+15, -0]} } },
      showCopyright: false, showNavigation: false
    });
      
  // Board brd0 needs to be updated when changes in brd1 occur
  brd1.addChild(brd0);
  
  // Attributes for points and lines
  function attrPfix(addAttr={}) {
    const attr = {fixed: true, visible: false, withLabel: false};
    return { ...attr, ...addAttr}; 
  }
  function attrPmov(addAttr={}) {
    const attr = {fixed: question.isSolved, snapToGrid: true, withLabel: false};
    return { ...attr, ...addAttr};
  }
  function attrPsma(addAttr={}) {
    const attr = {visible: true, withLabel: false, color:'#4285F4', size: 1};
    return { ...attr, ...addAttr};
  }
  const attrLine = {borders: {strokeColor:'#4285F4', strokeWidth: 3} };
  const attrGlid = {visible:false};


  // Define lines and points on brd1
  brd1.suspendUpdate();
  var lV0 = brd1.create('segment', [[0,-10], [0,10]], {visible:false}),
      lV3 = brd1.create('segment', [[-10,0], [20,0]], {visible:false});
  var pV0 = brd1.create('glider', [0, v1, lV0], attrPmov({name: "pV0"}) ),
      pV1 = brd1.create('point', [t1, v2], attrPmov({name: "pV1"}) ),
      pV2 = brd1.create('point', [t2, v3], attrPmov({name: "pV2"}) ),
      pV3 = brd1.create('glider', [t3, 0, lV3], attrPmov({name: "pV3"}) ),
      pV01 = brd1.create('point', ["X(pV1)", "Y(pV0)"], attrPsma() ),
      pV12 = brd1.create('point', ["X(pV2)", "Y(pV1)"], attrPsma() ),
      pV23 = brd1.create('point', ["X(pV3)", "Y(pV2)"], attrPsma() )  ;
  brd1.create('polygonalchain', [ pV0, pV01, pV1, pV12, pV2, pV23, pV3 ], attrLine);
  brd1.unsuspendUpdate();

  // Define lines and points on brd1
  // Q: Is it necessary/beneficial/wrong to suspendUpdate here?
  brd0.suspendUpdate();
  var lX1 = brd0.create('line', [[function(){return pV1.X();},-10], [function(){return pV1.X();},10]], attrGlid),
      lX2 = brd0.create('line', [[function(){return pV2.X();},-10], [function(){return pV2.X();},10]], attrGlid),
      lX3 = brd0.create('line', [[function(){return pV3.X();},-10], [function(){return pV3.X();},10]], attrGlid);
  var pX0 = brd0.create('point', [0, x0], attrPsma({fixed: true}) ),
      pX1 = brd0.create('glider', [t1, x1, lX1], attrPmov({face: 'diamond'}) ),
      pX2 = brd0.create('glider', [t2, x2, lX2], attrPmov({face: 'diamond'}) ),
      pX3 = brd0.create('glider', [t3, x3, lX3], attrPmov({face: 'diamond'}) );
  brd0.create('polygonalchain', [ pX0, pX1, pX2, pX3 ], attrLine);
  brd0.unsuspendUpdate();

  // Q: Are these updates necessary?
  brd0.update();
  brd1.update();

  // Whenever the construction is altered the values of the points are sent to formulas.
  question.bindInput(0, () => { return pV1.X(); });
  question.bindInput(1, () => { return PV2.X(); });
  question.bindInput(2, () => { return pV3.X(); });
  question.bindInput(3, () => { return pV1.Y(); });
  question.bindInput(4, () => { return pV2.Y(); });
  question.bindInput(5, () => { return PV3.Y(); });
  question.bindInput(6, () => { return pX1.Y(); });
  question.bindInput(7, () => { return pX2.Y(); });
  question.bindInput(8, () => { return pX3.Y(); });
  };
  
  // Execute the JavaScript code.
  new JSXQuestion(BOARDID0, jsxCode, allowInputEntry=true);
  
</jsxgraph>

是否可能是由于未正确提交板ID引起的问题

new JSXQuestion(BOARDID0, jsxCode, allowInputEntry=true);

除了这个问题,我想更好地理解JSXGraph:

  1. 是否可以相对于彼此布置多个板?也就是说,在上方,下方,右对齐,居中等。
  2. 将板初始化为“ const”还是“ var”是否有所不同?
  3. 在上述示例中,是否有必要/有益/错误地暂停和取消暂停电路板更新?
  4. 代码中的手动更新命令是否必要/有益/无用?
  5. 我的JSXGraph编码或用法是否有明显的失误?
安德烈亚斯

实际上,正确的是我们的过滤器与公式结合不能在多个面板上正常工作。目前,只有一个板ID传输到JSXQuestion对象,因此,它(和公式)对第二块板一无所知。这也是您的示例提出的问题之一。

此外,实际上必须使用JSXQuestion.initBoard()方法初始化这些板,bindInput()方法才能起作用。最后,这就是为什么您的示例不起作用的根本问题。

圣诞假期后,我将致力于解决这个问题,并将于一月份发布新版本的Moodle过滤器。到那时,也许JSXGraph也会有一些新东西。

不幸的是,在那之前我无法为您提供肮脏的技巧,因为它需要对过滤器进行一些基本更改。

我希望能够在一月份告诉您更多信息。圣诞快乐,保持健康!

安德烈亚斯

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有非动态输入字段的动态输入字段插入到两个 mysql 表中不起作用

来自分类Dev

当两个具有相同ID的字段时,jQuery远程验证不起作用

来自分类Dev

两个具有键入功能的输入字段

来自分类Dev

将两个XAML元素属性绑定到相同的ViewModel属性不起作用

来自分类Dev

两个网卡的绑定不起作用/无法启动

来自分类Dev

堆叠两个功能时,带有css的Fadein更改不起作用

来自分类Dev

为什么一个功能起作用,但两个功能都不起作用?

来自分类Dev

具有两个面板的CSS 100%宽度布局-为什么不起作用?

来自分类Dev

通过对具有相同索引的元素求和来合并两个列表不起作用

来自分类Dev

使用layout_weight使两个LinearLayout具有相同的高度,不起作用

来自分类Dev

通过对具有相同索引的元素求和来合并两个列表不起作用

来自分类Dev

具有两个条件的 Linq Where 子句,不起作用

来自分类Dev

ng模型中具有单向绑定的两个输入

来自分类Dev

LINQ中两个列表的并集不起作用

来自分类Dev

两个Jquery在母版页中不起作用

来自分类Dev

LINQ中两个列表的并集不起作用

来自分类Dev

anr 中的两个等号 (==) 不起作用

来自分类Dev

两个具有相似属性且无法在watir中输入值的文本字段

来自分类Dev

填写 1 个输入字段时禁用所有其他输入字段不起作用

来自分类Dev

为什么在比较两个具有相同int值的对象类型变量时==不起作用

来自分类Dev

具有两个参数的Rails查询在生产中不起作用:运算符不存在

来自分类Dev

模糊推理系统中可以有 1 个以上的功能块吗?

来自分类Dev

c中具有相同功能的两个声明

来自分类Dev

两个输入在Shiny中具有相同的值

来自分类Dev

Javascript触发功能两次且4个功能中的1个不起作用

来自分类Dev

两个正则表达式功能一起不起作用

来自分类Dev

Flutter异步/等待在两个Firebase功能之间不起作用

来自分类Dev

切换两个视图控制器,后退功能不起作用

来自分类Dev

在knitr 1.6.10的R 3.1.1中,将代码输入到块中的knitr块选项代码不起作用

Related 相关文章

  1. 1

    具有非动态输入字段的动态输入字段插入到两个 mysql 表中不起作用

  2. 2

    当两个具有相同ID的字段时,jQuery远程验证不起作用

  3. 3

    两个具有键入功能的输入字段

  4. 4

    将两个XAML元素属性绑定到相同的ViewModel属性不起作用

  5. 5

    两个网卡的绑定不起作用/无法启动

  6. 6

    堆叠两个功能时,带有css的Fadein更改不起作用

  7. 7

    为什么一个功能起作用,但两个功能都不起作用?

  8. 8

    具有两个面板的CSS 100%宽度布局-为什么不起作用?

  9. 9

    通过对具有相同索引的元素求和来合并两个列表不起作用

  10. 10

    使用layout_weight使两个LinearLayout具有相同的高度,不起作用

  11. 11

    通过对具有相同索引的元素求和来合并两个列表不起作用

  12. 12

    具有两个条件的 Linq Where 子句,不起作用

  13. 13

    ng模型中具有单向绑定的两个输入

  14. 14

    LINQ中两个列表的并集不起作用

  15. 15

    两个Jquery在母版页中不起作用

  16. 16

    LINQ中两个列表的并集不起作用

  17. 17

    anr 中的两个等号 (==) 不起作用

  18. 18

    两个具有相似属性且无法在watir中输入值的文本字段

  19. 19

    填写 1 个输入字段时禁用所有其他输入字段不起作用

  20. 20

    为什么在比较两个具有相同int值的对象类型变量时==不起作用

  21. 21

    具有两个参数的Rails查询在生产中不起作用:运算符不存在

  22. 22

    模糊推理系统中可以有 1 个以上的功能块吗?

  23. 23

    c中具有相同功能的两个声明

  24. 24

    两个输入在Shiny中具有相同的值

  25. 25

    Javascript触发功能两次且4个功能中的1个不起作用

  26. 26

    两个正则表达式功能一起不起作用

  27. 27

    Flutter异步/等待在两个Firebase功能之间不起作用

  28. 28

    切换两个视图控制器,后退功能不起作用

  29. 29

    在knitr 1.6.10的R 3.1.1中,将代码输入到块中的knitr块选项代码不起作用

热门标签

归档