Tokeninput将新标记保存到数据库

时间:2014-02-14 16:48:19

标签: javascript php jquery grails jquery-tokeninput

我正在尝试保存输入字段中输入的新标记,该标记在数据库中不存在,并且希望在表单提交上保存该创建的标记。这是我的控制器,它将自动完成列表发送到tokeninput输入字段:

def tags = {
        def foundTags = Tag.findAllByTagnameIlike("${params.q}%")
        def output = []
        foundTags.each {
            output.add([id: it.id, name: it.tagname]) // assumes Tag has an id field exposed
        }
        if(output.size()==0){
            def c = Tag.createCriteria()
            def maxId = c.get {
                projections {
                    max('id')
                }
            }
            output.add([id:(maxId+1),name:params.q])
        }
        render output as JSON
    }

我的jQuery脚本是:

<script type="text/javascript">
        $(document).ready(function () {
            $("#my-text-input").tokenInput("${createLink(controller: 'product', action: 'tags')}",{theme: "facebook",allowFreeTagging:"true"});
        });
    </script>

现在,当我提交表单时,我将params.tags作为输入字段中新输入的标签的ID。但实际上这些ID不存在并且由output.add([id:(maxId+1),name:params.q])创建,仅仅是因为tokeninput要求它在那里。 那么如何在params.tags而不是id中获取标签名称?事实上我需要像这张地图["id1":"tagname1","id2":"tagname2".....]这样的东西。那么我如何获得实际的标记名而不是服务器端操作中的id字段,这些字段持续表单参数?

1 个答案:

答案 0 :(得分:1)

在设置过程中使用tokenValue参数。

e.g。在jQuery中

    <script type="text/javascript">
            $(document).ready(function () {
                $("#my-text-input").tokenInput("${createLink(controller: 'product', action: 'tags')}",{
                   theme: "facebook",
                   allowFreeTagging:"true",
                   tokenValue:"name"
                 });
            });
        </script>

这将提交一个names而不是ID的数组。如果您同时需要名称和ID,则最好通过onAdd参数为每个令牌添加自定义属性,然后将其设置为tokenValue