下面是我提出的一个最简单可行的例子:
我定义了一个小自定义块
print
Blockly.defineBlocksWithJsonArray([
{
type: 'print',
message0: 'print %1',
args0: [
{ type: 'field_input', name: 'EMOJI_CODE' }
]
}
]);
然后我用这个新块初始化块编辑器:
const ws = Blockly.inject('ide', {
toolbox: {
kind: 'flyoutToolbox',
contents: [
{ kind: 'block', type: 'print' }
]
}
});
然后我需要定义块将生成什么。
:-)
变成
ð
我定义了一种新的语言,以及
打印
块应执行以下操作:
const emojiLang = new Blockly.Generator('EmojiLang');
emojiLang['print'] = function (block) {
const code = block.getFieldValue('EMOJI_CODE');
if (!code) return 'waitingâ¦';
if (code == ':-)') return 'ð';
if (code == ':-(') return 'ð';
if (code == ':-/') return 'ð';
return '(unknown)';
};
最后,我听取了编辑器中的更改,以将块翻译为表情符号:
ws.addChangeListener(function () {
document.getElementById('out').innerHTML =
emojiLang.workspaceToCode(ws);
});
const emojiLang = new Blockly.Generator('EmojiLang');
emojiLang['print'] = function (block) {
const code = block.getFieldValue('EMOJI_CODE');
if (!code) return 'waitingâ¦';
if (code == ':-)') return 'ð';
if (code == ':-(') return 'ð';
if (code == ':-/') return 'ð';
return '(unknown)';
};
Blockly.defineBlocksWithJsonArray([
{
type: 'print',
message0: 'print %1',
args0: [
{ type: 'field_input', name: 'EMOJI_CODE' }
]
}
]);
const ws = Blockly.inject('ide', {
toolbox: {
kind: 'flyoutToolbox',
contents: [
{ kind: 'block', type: 'print' }
]
}
});
ws.addChangeListener(function () {
document.getElementById('out').innerHTML =
emojiLang.workspaceToCode(ws);
});
<script src="https://unpkg.com/blockly/blockly.min.js"></script>
Emoji: <span id="out"></span>
<div id="ide" style="height:200px;width:400px;"></div>