不寻常的JavaScript for loop,在Blockly中使用xml
Unusual JavaScript for loop with xml in Blockly
我正在与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 对象?它似乎总是返回未定义并完全跳过循环。
谢谢你的帮助
大多数函数的定义可以在 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>}
。
考虑到文档在有关并行执行的部分中显示了它,我认为它将与以下事实有关,即您可以拥有更多未连接的代码分支......确切的实现会随着时间的推移而改变。
根据代码,Blockly.Xml.workspaceToDom(workspace)
的返回类型为 {!Element}
。
它基本上返回使用 goog.dom.createDom('xml');
创建的 DOM 节点。对于每个顶级块,它都会附加一个 DOM 节点。
所以基本上有问题的代码片段正在循环遍历与顶级块对应的所有 DOM 节点。
- 我应该如何从xml文件构建一个javascript页面
- 将XML转换为普通的旧JavaScript对象
- jQuery AJAX write to XML
- 如何将childNodes用于XML文档
- 在javascript中的xml中创建一个链接
- JSON到XML的转换
- SVG xml to image
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 显示IIS上javascript文件(SOAP请求)的XML响应
- 在Javascript中循环使用XML
- 谷歌电子表格的自定义xml解析功能
- Windows 8 Javascript应用程序XML对象
- 如何在Node.js中根据XML验证DTD
- 如何使用javascript或jquery mobile从url读取和显示XML文件
- 使用Javascript反向遍历XML
- 在CSS和HTML中显示XML
- 带有显示XML数据的HTML的空白页
- 如何使用JQUERY解析大型XML文件并将其可视化为HTML格式
- ExtJS 4:编写带有模型关联的嵌套XML
- 不寻常的JavaScript for loop,在Blockly中使用xml