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

问题描述 投票:0回答:2

我目前正在开发一个JIRA 7服务器插件,我被卡住了,我会感激我能得到任何帮助。我是JIRA和JavaScript的新手,所以请原谅我,如果我没有看到明显的解决方案:-)

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

AJS.toInit(function() {

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

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

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

  1. 将我的JavaScript文件绑定到atl.general上下文。如果我这样做,脚本会在第一次加载属于atl.general上下文的页面时运行,即仪表板,任何问题等,但是当我导航到另一个问题时,脚本不再运行。
  2. 将我的JavaScript文件绑定到自定义上下文并在我的模板中使用它。如果我这样做,当我导航到另一个问题时,脚本会在第一次显示具有该Web面板的问题时运行,但不会再次运行。

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

javascript jira jira-plugin
2个回答
0
投票

如果您自己构建按钮和dialog2 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();
  });
});

0
投票

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

我没有直接将按钮处理程序注册到按钮,而是将其注册到我知道不会被删除的最顶层DOM-Element,只要我不留下我的脚本绑定的上下文:带有id的body标签“JIRA”。方法如下:

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

这将适用于id为“jira”的元素中具有id“myButtonId”的任何按钮。即使前者尚未插入。有关详细信息,请参阅jQuery documentation

© www.soinside.com 2019 - 2024. All rights reserved.