Я сделал следующий блок с Blockly
в файле customBlocks.js
:
Blockly.Blocks['move_right'] = {
init: function() {
this.appendValueInput("PIXELS")
.setCheck("Number")
.appendField("move to right");
this.setInputsInline(true);
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
this.setColour(290);
this.setTooltip('');
this.setHelpUrl('http://www.example.com/');
}
};
Blockly.JavaScript['move_right'] = function(block) {
var value_pixels = Blockly.JavaScript.valueToCode(block, 'PIXELS', Blockly.JavaScript.ORDER_ATOMIC);
// TODO: Assemble JavaScript into code variable.
var codeMoveRight = "$(\"#moveDiv\").animate({\n " +
"left: \"+=" + value_pixels + "px\"\n" +
"},1000);\n";
return codeMoveRight;
};
который перемещает a div
вправо в зависимости от того, сколько пикселей вы установили на нем. Вам нужно будет поместить блок math_number
внутри блока move_right
, чтобы поместить количество пикселей, которое вы хотите переместить.
У меня на моем html
файле a workspace
переменная, которая вводит Blockly workspace
:
var workspace = Blockly.inject('blocklyDiv',
{toolbox: document.getElementById('toolbox')});
Что я хочу сделать
Требуется извлечь из JavaScript это количество пикселей один раз, когда блок был отображен в рабочей области Blockly, а не раньше.
Что я пробовал
-
Я напрямую попытался получить доступ к переменной
workspace
из консоли моего браузера (Google Chrome) и мог получить "дочерние блоки", но не значение их. Как показано ниже:console.log(workspace.topBlocks_[0].childBlocks_);
-
Я также попытался перевести рабочее пространство в dom, а затем в текст:
var xml = Blockly.Xml.workspaceToDom(workspace); var xml_text = Blockly.Xml.domToText(xml); console.log(xml_text);
и здесь я вижу, что значение "дочернего блока", я имею в виду, блок
math_number
, оно сохраняется в тексте, но я не знаю, как его получить.
Почему я хочу достичь этого?
Потому что я хочу, чтобы проверить, переместил ли пользователь 300 пикселей вправо. Если да, тогда я покажу сообщение, в котором я поставлю "Вы его получите!".
Мой вопрос
Есть ли возможность сделать экземпляр этого Блока, который я положил в рабочую область, а затем получить доступ к его пикселю с этим экземпляром?
EDIT:
Я также мог получить значение left
, как сказал @Oriol:
$('#moveDiv').css('left');
но я не указал его здесь, потому что он использует свойство Jquery
(это вообще не имеет значения, потому что это хороший вариант, но не так, как предполагалось). Мое намерение состоит в том, чтобы получить экземпляр Block
после того, как он положил его на Blockly workspace
, чтобы работать позже с ним в любое время.
Спасибо заранее!