【问题标题】:How to develop custom field (plugin) having multiple input fields如何开发具有多个输入字段的自定义字段(插件)
【发布时间】:2013-06-15 22:20:41
【问题描述】:

在自定义字段插件开发中,我们创建一个自定义字段,如下所示(有多个输入字段):

自定义字段名称:<Input Textbox> <Input Textbox> <Input Textbox> <sum of input 1,input 2 & input 2>

我正在按照教程Creating a Custom Field in JIRA 创建插件。

在下面,我更新了edit.vm 如下,以包含额外的两个文本输入,但它不起作用......只是出现了额外的文本框......(我不确定还需要什么其他更改)。

 #customControlHeader ($action $customField.id $customField.name $fieldLayoutItem.required     $displayParameters $auiparams)
 <input class="text" id="$customField.id" name="$customField.id" type="text"     value="$textutils.htmlEncode($!value)" /><input class="text" id="$customField.id"     name="$customField.id" type="text" value="$textutils.htmlEncode($!value)" /><input class="text"    id="$customField.id" name="$customField.id" type="text" value="$textutils.htmlEncode($!value)" />
#customControlFooter ($action $customField.id $fieldLayoutItem.fieldDescription     $displayParameters $auiparams)

任何人都可以建议我如何更新它以实现自定义字段中的其他字段并保留不同的值并获得它们的总数。

【问题讨论】:

    标签: jira jira-plugin


    【解决方案1】:

    另一种方法是在客户端生成字段。您可以将代码添加到custom fields,这将添加所需的表单字段。例如,要添加 2 个简单输入,请使用以下脚本:

    <script type="text/javascript">
        var table = AJS.$('<table>').append(
                AJS.$('<tr>').append(
                    AJS.$('<td>',{text:'first'})
                ).append(
                    AJS.$('<td>',{class:'myinput'}).html(AJS.$('<input>'))
                )
            ).append(
                AJS.$('<tr>').append(
                    AJS.$('<td>',{text:'second'})
                ).append(
                    AJS.$('<td>',{class:'myinput'}).html(AJS.$('<input>'))
                )
            );
        AJS.$("input#customfield_10001").before(table)
    </script>
    

    创建一个小函数来获取表单内容:

    function collect_data() {
        var content = AJS.$(".myinput input").map(function() {return this.value});
        var json = '{"first":"'+content[0]+'","second":"'+content[1]+'"}';
        AJS.$("input#customfield_10002").val(json);
    }
    

    最后,收集每次更改的更新信息:

    AJS.$(".myinput").on('input',function(){ 
        collect_data();
    });
    

    如果您决定使用此功能,请更新所有字段 ID,根据需要修改输入字段,并添加更改表单创建代码,以便使用您选择的值填充输入。

    如果您需要更多信息,请告诉我。

    【讨论】:

    • 我们也可以求和(总计)并显示吗?示例:我将 - text inpu1 textinput 2, textinput 3 在一行和第二行,再次三个输入,现在,在第三行,我需要对前两行输入求和。如何获得最后一行这样的结果或汇总字段。
    • 当然可以,读取值,例如var x = parseInt(AJS.$(".myinput input"));,将它们相加并将它们的值插入到所需的位置。
    • 谢谢@kuf 你能否在另一个相关查询中查看必须创建级联月-年选择器自定义字段的位置:stackoverflow.com/questions/17270650/… 谢谢。
    • 我添加了摘要自定义字段,该字段也显示在视图屏幕上。现在,当我对其他字段进行内联编辑并保存时,此摘要自定义字段(通过客户端 javascript 显示为我们的讨论评论)会消失,需要刷新屏幕,然后在它出现并更新值之后。你能建议我应该如何解决它,以及我将如何确保添加的 javascript 对象不存在然后只添加其他明智的,它可能是重复的摘要行。谢谢。
    • 在这里,因为在问题视图屏幕上进行内联编辑后控件会消失。 (看起来是由于作为 ajax 的内联编辑,并且我们的 javascript 在页面再次重新加载之前不会被加载......但不明白,如何解决和保留通过 javascript 添加的自定义字段)?
    【解决方案2】:

    Practical JIRA Plugins 的第 3 章有一个在 JIRA 自定义字段中存储多个值的工作示例。该示例的源代码可在https://bitbucket.org/mdoar/practical-jira-plugins下载

    【讨论】:

    • 感谢这个教程链接,它真的很有帮助。在这个多值示例中,AbstractCustomFieldType&lt;Collection&lt;Carrier&gt;, Carrier&gt; 的扩展类型。我还在 view.vm 和“edit.vm”文件中添加了“
    • 所以基本上,只是尝试在多值教程中添加一个下拉/选择选择器列表对齐到输入文本框,因为这将在这里需要。请让我知道这一点。非常感谢。
    • 请查看面临问题的详细信息 - stackoverflow.com/questions/17482619/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 2014-05-29
    • 2011-10-29
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多