如何在 JIRA 中显示问题时 运行 JavaScript 编码

How to run JavaScript Code when an issue is displayed in JIRA

我目前正在开发 JIRA 7 服务器附加组件,我遇到了困难,如果能得到任何帮助,我将不胜感激。我是 JIRA 和 JavaScript 的新手,如果我没有看到明显的解决方案,请原谅我:-)

我的附加组件包含一个网络面板,需要一些 JavaScript 才能运行。我打算 JavaScript 注册一个触发对话框的点击处理程序。目前看起来像这样:

AJS.toInit(function() {

  var buttonClickHandler = function() {
    AJS.dialog2("#myDialogId").show();
  };

  AJS.$("#myButtonId").click(buttonClickHandler);
}

对话框和按钮的实际 ID 取决于显示的问题。很明显,当我的 dialog2 和我的按钮出现在 DOM 中时,我希望此代码为 运行,这是每次我导航到一个问题时(不仅仅是我第一次导航到 任何 个问题)。不幸的是我不知道该怎么做。我尝试了以下方法,但均无效:

  1. 将我的 JavaScript 文件绑定到 atl.general 上下文。如果我在第一次加载属于 atl.general 上下文的页面(即仪表板、任何问题等)时执行脚本 运行s,但是当我导航到另一个问题时,脚本会执行不再 运行。

  2. 将我的 JavaScript 文件绑定到自定义上下文并在我的模板中使用它。如果我这样做,脚本 运行s 第一次显示具有该 Web 面板的问题,但当我导航到另一个问题时再次显示 运行。

我想我可以找到一个基于 jira 事件的解决方案,即使用 JIRA.bind() 将函数注册为事件处理程序并将我的代码放在那里。但是,这将需要一个事件,只要我希望我的代码 运行,即每当显示问题时就会触发该事件。我尝试了 JIRA.Events.NEW_CONTENT_ADDED, function(e, context, reason) {...}),但从未调用过事件处理程序(我使用 console.log() 语句进行了检查)。我不知道存在哪些其他 Jira 事件可以为我所用,我也找不到任何关于它的文档。

如果您自己构建按钮和对话框 2 HTML,那么您可以自己控制 HTML 和 JavaScript。

使用具有 data-controls 属性的按钮来告诉它触发哪个 dialog2:

<button class="aui-button your-button-class" data-controls="#your-dialog-uniqueId">Show dialog</button>

<!-- Render the dialog -->
<section role="dialog" id="your-dialog-uniqueId" class="aui-layer aui-dialog2 aui-dialog2-medium" aria-hidden="true">
   ...
</section>

...然后你可以添加 JavaScript 它从按钮的 data-controls 属性中读取 dialog2 元素的 ID 并触发适当的 dialog2:

AJS.toInit(function($) {    
  $(".aui-button.your-button-class").on('click', function() {
    var dialogId = $(this).data('controls');
    AJS.dialog2(dialogId).show();
  });
});

好吧,每次显示问题时我都找不到如何 运行 我的脚本,但我确实找到了解决我的问题的实用方法:

我没有直接将点击处理程序注册到按钮,而是将它注册到最顶层的 DOM-我知道只要我不离开我的脚本所在的上下文就不会被删除的元素绑定到:id 为 "jira" 的 body 标签。方法如下:

AJS.$("#jira").on("click", "#myButtonId", buttonClickHandler);

这将应用于 ID 为 "jira" 的元素内 ID 为 "myButtonId" 的任何按钮。即使前者尚未插入。有关详细信息,请参阅 jQuery documentation