我目前正在开发一个JIRA 7服务器插件,我被卡住了,我会感激我能得到任何帮助。我是JIRA和JavaScript的新手,所以请原谅我,如果我没有看到明显的解决方案:-)
我的附加组件包含一个需要一些JavaScript才能运行的Web面板。我打算让JavaScript注册一个触发对话框的点击处理程序。目前它看起来像这样:
AJS.toInit(function() {
var buttonClickHandler = function() {
AJS.dialog2("#myDialogId").show();
};
AJS.$("#myButtonId").click(buttonClickHandler);
}
对话框和按钮的实际ID取决于显示的问题。我希望这个代码能够在我的dialog2和我的按钮出现在DOM中时运行,这是每次我导航到一个问题(不仅仅是我第一次导航到任何问题)。不幸的是我不知道该怎么做。我尝试了以下方法,但都没有起作用:
我想我可以找到一个基于jira事件的解决方案,即使用JIRA.bind()将函数注册为事件处理程序并将我的代码放在那里。然而,这将需要在我希望我的代码运行时触发的事件,即每当出现问题时。我尝试了JIRA.Events.NEW_CONTENT_ADDED, function(e, context, reason) {...})
,但从未调用过事件处理程序(我使用console.log()语句检查过)。我不知道哪些其他Jira事件可能对我有利,我也找不到任何文档。
如果您自己构建按钮和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();
});
});
好吧,每次显示问题时我都无法找到如何运行我的脚本,但我确实找到了解决问题的实用方法:
我没有直接将按钮处理程序注册到按钮,而是将其注册到我知道不会被删除的最顶层DOM-Element,只要我不留下我的脚本绑定的上下文:带有id的body标签“JIRA”。方法如下:
AJS.$("#jira").on("click", "#myButtonId", buttonClickHandler);
这将适用于id为“jira”的元素中具有id“myButtonId”的任何按钮。即使前者尚未插入。有关详细信息,请参阅jQuery documentation。