duanjizi9443
duanjizi9443
2014-02-14 16:48

Tokeninput将新标记保存到数据库

已采纳

I am trying to save a new tag entered in input field that was not there in database and want to save that created tag on form submit. Here is my controller which is sending the autocomplete list to the tokeninput input field:

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
    }

My jQuery script is:

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

Now when I submit the form, i get params.tags as the ids of those newly entered tags in the input field.But actually these IDs do not exist and are created by output.add([id:(maxId+1),name:params.q]) just for the reason that tokeninput requires it to be there. So how do i get the tag names in the params.tags instead of the ids? Infact i require something like this map ["id1":"tagname1","id2":"tagname2".....]. So how do i get the actual tagname instead of the id fields in the server side action which persists the form params?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • douwenan9849 douwenan9849 7年前

    Make use of the tokenValue parameter during set up.

    e.g. In jQuery

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

    This will submit an array of names instead of IDs. If you need both name's and id's, you're probably best adding a custom attribute to each token through an onAdd parameter, and then setting that to the tokenValue.

    点赞 评论 复制链接分享