javascript - blocky - 未定义的属性

标签 javascript blockly

我正在尝试在 blockly 中创建自定义 block ,但似乎无法让它工作。我从 block factory 生成代码这就是我得到的:

//say_input.js

Blockly.Blocks['say_input'] = {
  init: function() {
    this.appendDummyInput()
        .appendField("say")
        .appendField(new Blockly.FieldTextInput("something"), "say_input");
    this.setColour(230);
 this.setTooltip("");
 this.setHelpUrl("");
  }
};

Blockly.JavaScript['say_input'] = function(block) {
  var text_say_input = block.getFieldValue('say_input');
  // TODO: Assemble JavaScript into code variable.
  // var code = 'alert("Hello! I am an alert box and'+text_say_input+'!");';
  var code = '...;\n';
  return code;
};

然后我将其导入到我的 html 中:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Blockly Demo: Fixed Blockly</title>
    <script src="js/blockly_compressed.js"></script>
    <script src="js/blocks_compressed.js"></script>
    <script src="js/msg/js/en.js"></script>

    <script src="js/blocks/say_input.js"></script>
    <style>
        body {
            background-color: #fff;
            font-family: sans-serif;
        }

        h1 {
            font-weight: normal;
            font-size: 140%;
        }
    </style>
</head>

<body>
    <button onclick="runCode()">Click me</button>
    <div id="blocklyDiv" style="height: 480px; width: 600px;"></div>

    <xml id="toolbox" style="display: none;">
        <block type="say_input">
            <field name="say_input">something</field>
        </block>
    </xml>

    <script>
        var demoWorkspace = Blockly.inject('blocklyDiv', {
            media: 'js/media/',
            toolbox: document.getElementById('toolbox')
        });

        function runCode(){
            window.LoopTrap = 1000;
            Blockly.JavaScript.INFINITE_LOOP_TRAP = 
            'if(--window.LoopTrap == 0) throw "Infinite loop."\n';
            var code = Blockly.JavaScript.workspaceToCode(workspace);
            Blockly.JavaScript.INFINITE_LOOP_TRAP = null;
            try {
                eval(code);
            } catch (e) {
                alert(e);
            }
        }
    </script>

</body>

</html>

并将其加载到浏览器。我立即收到此错误:

Cannot set property 'say_input' of undefined

错误所在行:

Blockly.JavaScript['say_input'] = function(block) {

我的自定义 block 出现在工作场所中,因此我确信链接正常工作。

我检查了this video似乎我没有做错什么。

我该如何解决这个问题?

最佳答案

我找到了解决方案。我必须链接 javascript_compressed.js 然后一切正常。

<script src="js/javascript_compressed.js"></script>

确保将其链接到自定义 block.js 之前。

关于javascript - blocky - 未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48413817/

相关文章:

javascript - 如何用空格分割字符串,并保持逗号分开?

javascript - 使用 jquery 自动填充 html 中的日期

javascript - Facebook 点赞按钮错误 - iFrame 显示个人资料图片而不是点赞按钮

javascript - 将表的特定 TD 元素转换为使用预填充选项进行选择

javascript - 检查 DOM 元素是否存在于 DIV 中,然后按顺序运行分配给这些元素的函数

javascript - 读取动态更新的属性值jquery

javascript - 在 WPF WebBrowser 中使用 Blockly

javascript - 如何将 "Functions tab"添加到 Google 的 blockly

javascript - 编译时出现 block 状错误

css - 还有另一种调整 Blockly 工作区大小的方法吗?