azure devops vsts 扩展动态上下文菜单,子菜单未正确加载
Posted
技术标签:
【中文标题】azure devops vsts 扩展动态上下文菜单,子菜单未正确加载【英文标题】:azure devops vsts extensions dynamic context-menu with child menu not loading properly 【发布时间】:2021-11-30 19:44:46 【问题描述】:我正在尝试开发一个扩展程序,允许我打开工作项上下文菜单并查看新菜单项/控件“查看测试结果”,当我将鼠标悬停在“查看测试结果”上时,将打开一个子菜单,其中包含配置可用。就像上下文菜单中的“移动到迭代”菜单一样。
我的 vss-extension.json 的贡献部分是
"contributions": [
"id": "change-status.contextmenu",
"type": "ms.vss-web.action-provider",
"description": "Change state selected items",
"targets": [
"ms.vss-work-web.work-item-context-menu",
"ms.vss-work-web.backlog-item-menu"
],
"properties":
"group": "contributed",
"uri": "configMenu.html"
]
HTML页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="lib/VSS.SDK.min.js"></script>
</head>
<body>
<script type="text/javascript">
VSS.init(
explicitNotifyLoaded: true,
usePlatformScripts: true,
configureModuleLoader: true
);
// Load main entry point for extension
VSS.require(["src/app"], function ()
// Loading succeeded
VSS.notifyLoadSucceeded();
);
</script>
</body>
app.ts 文件
import MenuHandler from "./logic/menuHandler";
VSS.register(VSS.getContribution().id, new MenuHandler().menuHandler);
最后是 menuHandler 函数
menuHandler= (context: any) : IContributedMenuSource =>
return <IContributedMenuSource>
getMenuItems: (actionContext: any) =>
return this.buildConfigurationMenu(actionContext).then(
subMenus => return this.buildMainMenuWithPromise(subMenus);
);
;
buildConfigurationMenu 函数调用 azure devops TestManagement api 并通过 TestCaseId 获取套件,然后 foreach 套件我们获取点,我们从点获取配置名称并返回名称数组以构建菜单项和 buildConfigurationMenu 返回一个承诺,然后 buildMainMenuWithPromise 调用它返回主菜单和 buildConfigurationMenu 函数返回的子菜单。
buildConfigurationMenu 和 buildMainMenuWithPromise 工作正常并返回所需的结果,正如我在调试时在控制台中看到的那样。
问题是当我第一次单击上下文菜单(...按钮)时,我看不到新添加的菜单“查看测试结果”,但是当我第二次单击上下文菜单时,我看到了“查看测试”结果”菜单,悬停时在子菜单中显示相关配置项。我希望它在第一次点击时显示。
我认为这与 api 调用延迟和承诺返回有关。我怎样才能解决这个问题或任何解决方法来避免这个问题?
谢谢
【问题讨论】:
【参考方案1】:我通过用 for 循环替换 foreach 循环解决了这个问题。我想从导致问题的 foreach 循环中调用 promise。谢谢
【讨论】:
以上是关于azure devops vsts 扩展动态上下文菜单,子菜单未正确加载的主要内容,如果未能解决你的问题,请参考以下文章
微软改名部又出动啦!微软宣布VSTS改名为Azure DevOps
Azure Devops (VSTS) 代理池和部署池之间的区别
MS AppCenter 和 Azure DevOps(前 VSTS)之间的主要区别是啥?
如何获取从 Azure Devops / VSTS / TFS 中的“Windows 机器文件复制”任务复制的文件总数?