PCIbex Farm实验代码运行显示空白屏问题求助
问题诊断与修复方案
核心问题分析
- HTML转义导致渲染失败:Target试次中直接将
<input>标签拼接进newText,PennController会自动转义HTML字符,导致输入框无法正常渲染,甚至引发DOM加载异常,最终显示空白屏。 - 试次标签与序列调度冲突:同一行生成的两个试次共用
training标签,randomize("training")会打乱所有同标签试次的顺序,破坏Prime-Target的配对关系,同时可能引发试次加载逻辑冲突。
修复后的完整代码
PennController.ResetPrefix(null) // 按pair分组随机化,每组内先执行Prime再执行Target Sequence( randomize("training_pair"), SendResults() ) Template("training_trials.csv", row => newTrial("training_pair", // Prime试次模块 newText("PRIME: " + row.prime_sentence).print(), newController("AcceptabilityJudgment", { s: row.prime_sentence, as: ["1", "2", "3", "4", "5", "6", "7"], presentAsScale: true, instructions: "Evaluate the sentence", leftComment: "weird", rightComment: "good" }).center().print().wait(), newTimer("pause", 300).start().wait(), // Target试次模块:用newHtml渲染带输入框的内容 newHtml("target-content", "TARGET: " + row.target_sentence.replace("___", "<input type='text' id='gap' style='width:100px;'>") ).print(), newButton("Next").print().wait() ) )
关键修复点说明
- 替换
newText为newHtml处理HTML内容:newHtml会直接解析HTML标签,确保输入框正常显示,解决空白屏的核心问题。 - 合并Prime与Target为单个试次组:将同一CSV行的两个试次整合到一个
newTrial中,用training_pair作为标签,既保证Prime-Target的严格顺序,又能通过randomize("training_pair")实现组间随机化。 - 消除标签重复问题:每个CSV行对应独立试次组,避免同标签试次引发的序列混乱。
可选拆分试次方案(如需独立试次)
如果必须将Prime和Target拆分为独立试次,可通过pairID生成唯一标签保证配对顺序:
PennController.ResetPrefix(null) // 随机化pair组,每组内先执行Prime再执行Target Sequence( ...shuffle(Template("training_trials.csv", row => [`training_prime_${row.pairID}`, `training_target_${row.pairID}`]).flat()), SendResults() ) Template("training_trials.csv", row => [ newTrial(`training_prime_${row.pairID}`, newText("PRIME: " + row.prime_sentence).print(), newController("AcceptabilityJudgment", { s: row.prime_sentence, as: ["1", "2", "3", "4", "5", "6", "7"], presentAsScale: true, instructions: "Evaluate the sentence", leftComment: "weird", rightComment: "good" }).center().print().wait(), newTimer("pause", 300).start().wait() ), newTrial(`training_target_${row.pairID}`, newHtml("target-content", "TARGET: " + row.target_sentence.replace("___", "<input type='text' id='gap' style='width:100px;'>") ).print(), newButton("Next").print().wait() ) ])
该方案通过pairID生成唯一试次标签,用shuffle和数组展开实现pair组的随机化,同时严格保留每组内Prime-Target的顺序。
内容的提问来源于stack exchange,提问作者maria_turner
相关产品推荐
相关产品推荐

