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