gpt4 book ai didi

javascript - 无需评估即可从用户提供的字符串生成自定义 Blockly block

转载 作者:搜寻专家 更新时间:2023-11-01 04:30:17 26 4
gpt4 key购买 nike

我正在使用 JavaScript 将字符串转换为 Google Blockly block 。

输入字符串类似于 "Hello %s World" - 其中 %s 定义字符串输入。我需要把它变成:

Blockly.Blocks['blockname'] = {
init: function() {
this.appendDummyInput()
.appendField("Hello ")
.appendField(new Blockly.FieldTextInput("input1"), "")
.appendField(" World");
}
};

但我不确定如何在不使用 eval() 的情况下实现这一点,并且由于输入字符串来自用户,我知道使用 eval()这不是一个好主意。

我当前的代码是:

currentLine = blockText[x].split(/(%s)/);
for( var y = 0; y < currentLine.length; y++ )
{
if( currentLine[y] == "" )
{
//do nothing
}
else if( currentLine[y] == "%s" )
{
//create a input
}
else
{
//create a label
}
}

但我不太确定如何创建我需要的 Blockly 代码,而不是在字符串中构建 JavaScript,然后在最后使用 eval()

有人可以帮我解决这个问题吗?

最佳答案

您可以创建自定义通用 block ,无需任何输入,如下所示 -

  Blockly.Blocks['generic_block'] = {
init: function() {
this.jsonInit({
message0: '',
colour: '230'
});
}
};

现在您可以通过代码创建此 block 的新实例。根据您的 JS 字符串解析,您可以在该 block 内创建输入和字段,如下所示 -

var lineBlock=yourBlocklyWorkspace.newBlock('generic_block');         // create new instance of generic block
var input=lineBlock.appendDummyInput(); // create a dummy input
var blockText="Hello %s World"; // one line of the JS code
var currentLine = blockText.split(/(%s)/); // split every word
for( var y = 0; y < currentLine.length; y++ ) { // loop through each word
if(currentLine[y]==='%s') { // if the word is %s, then append input field
input.appendField(new Blockly.FieldTextInput('input'+y)); // input+y is the name of the field
} else { // else just append label field
var labelField=new Blockly.FieldLabel('label'+y); // label+y is the name of the field
labelField.setValue(currentLine[y]); // set the label value to the word
input.appendField(labelField)
}
}

关于javascript - 无需评估即可从用户提供的字符串生成自定义 Blockly block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35654023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com