TFS 2018u1自定义对话框参数获取方法问询
更优雅的TFS自定义对话框参数获取方案
当然有比解析URL查询字符串更合适的方法!你可以直接借助VSS SDK提供的VSS.getConfiguration()接口来获取参数,这完全符合TFS扩展的开发规范,还能避免手动解析URL带来的各种麻烦。
针对你当前的URL占位符场景
你现在已经在清单里用{{ID}}、{{Name}}这类占位符,并且通过openDialog()的urlReplacementObject传递参数了,这种情况下不需要改动现有调用逻辑,只需要在对话框的脚本里这样获取参数:
// 先初始化VSS SDK VSS.init({ explicitNotifyLoaded: true }); VSS.ready(function() { // 获取对话框配置 const dialogConfig = VSS.getConfiguration(); // 从customUrlParams里直接拿到你的参数 const dialogParams = dialogConfig.customUrlParams; const itemId = dialogParams.ID; const itemName = dialogParams.Name; // 接下来就可以用这些参数做业务逻辑了 console.log(`收到参数:ID=${itemId},Name=${itemName}`); // 通知SDK对话框加载完成 VSS.notifyLoadSucceeded(); });
更推荐的复杂参数传递方式
如果你的参数不止简单字符串,或者不想依赖URL传递,还可以直接通过对话框的context属性传递参数,这种方式更灵活,也没有URL长度限制:
调用端打开对话框的代码
VSS.getService(VSS.ServiceIds.Dialog).then(function(dialogService) { const dialogOptions = { title: "我的自定义对话框", width: 800, height: 600, // 在这里传递任意结构的参数 context: { ID: "PROJ-123", Name: "客户管理系统", // 甚至可以传递复杂对象 projectDetails: { owner: "张三", createDate: "2024-01-01" } } }; dialogService.openDialog("mydlg.html", dialogOptions); });
对话框端获取参数的代码
VSS.init({ explicitNotifyLoaded: true }); VSS.ready(function() { const dialogConfig = VSS.getConfiguration(); // 直接从context里拿参数 const contextParams = dialogConfig.context; const projectId = contextParams.ID; const projectName = contextParams.Name; const projectOwner = contextParams.projectDetails.owner; VSS.notifyLoadSucceeded(); });
为什么这个方法更好?
- 不用自己编写查询字符串解析代码,避免了编码错误、参数名拼写排查等琐碎问题;
- 和VSS平台的上下文机制深度集成,兼容性更强,即使未来平台有更新,SDK接口也会保持稳定;
- 支持传递复杂数据结构,满足更多业务场景需求。
内容的提问来源于stack exchange,提问作者Seva Alekseyev
相关产品推荐
相关产品推荐

