我正在尝试保存输入字段中输入的新标记,该标记在数据库中不存在,并且希望在表单提交上保存该创建的标记。这是我的控制器,它将自动完成列表发送到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字段,这些字段持续表单参数?
答案 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
。