我正在与Google的Blockly进行项目合作,但部分文档令人难以理解。有人可以帮助我了解以下for循环的结束条件(xml = allXml [i])吗?
var allXml = Blockly.Xml.workspaceToDom(workspace);
var allCode = [];
for (var i = 0, xml; xml = allXml[i]; i++) {
var headless = new Blockly.Workspace();
Blockly.Xml.domToWorkspace(headless, xml);
allCode.push(Blockly.JavaScript.workspaceToCode(headless));
headless.dispose();
}
我想当未定义allXml [i]时,循环将退出,但是如何遍历这样的XML对象呢?似乎总是返回undefined并完全跳过循环。
谢谢你的帮助
有关大多数功能的定义,请参见https://code.google.com/p/blockly/source/browse/trunk/core/xml.js?r=1614
我从中提取的文档页面是https://developers.google.com/blockly/custom-blocks/code-structure?hl=en
最佳答案
我在github的存储库中找不到此代码,因此我认为它是文档中较旧的示例。
但是,如果您看一下Blockly.Xml.workspaceToDom()
函数的实现,您会在那看到非常相似的东西。
var blocks = workspace.getTopBlocks(true);
for (var i = 0, block; block = blocks[i]; i++) {
var element = Blockly.Xml.blockToDom_(block);
//...
xml.appendChild(element);
}
这里的想法是遍历所有代码分支。最上面的块没有最上面的连接(它将启动一个新的分支)。
getTopBlocks()
返回一个数组{!Array.<!Blockly.Block>}
。考虑到文档在有关并行执行的部分中进行了介绍,我认为这与以下事实有关:您可以拥有更多未连接的代码分支……确切的实现随时间而改变。