我正在使用伟大的TokenInput插件(http://loopj.com/jquery-tokeninput/)来为rails做一些自动完成,而对于模型中的一组正常数据,它可以很好地工作。但我的问题是,在我的情况下,我实际上有2个文本框我想使用它,第二个的建议应该取决于第一个的内容。 更具体地说:我需要选择一个足球俱乐部(我可以从我的数据库中的所有现有俱乐部中自动完成),然后选择参加比赛的球队。所以团队的自动完成应该只使用与已经选择的俱乐部相关联的团队,我完全不知道如何,甚至我是否可以在rails和这个插件中做到这一点(但插件本身不应该是一个障碍)。 我想我的主要问题是我缺乏javascript的经验,特别是与rails结合使用。 有人在他/她的应用程序中做了类似的事情,可以帮助我吗?
答案 0 :(得分:1)
您的问题可能有许多不同的边缘情况。看看tokenInput方法' onResult '。
也许您可以从第一个输入字段(input-1)获取当前值,并根据input-1评估输入-2的返回json,并过滤掉您不想要的值。 您将不经意地必须在rails创建的json数组中包含所需的id元素以进行过滤。
<script type="text/javascript">
$(document).ready(function() {
$("#input-1").tokenInput("http://railsapp.com/your/search/action");
$("#input-2").tokenInput("http://railsapp.com/your/search/action", {
onResult: function (results) {
var input-1 = $("#input-1").val();
$.each(results, function (index, value) {
// some JS to keep only results which match input-1 values
});
return results;
}
});
});
</script>
免责声明:这只是一个想法。
希望这有帮助。
答案 1 :(得分:1)
感谢您的回答。我知道,我需要使用onResult回调但是想错了方向。所以你的答案实际上帮助我使我的方法正确。我按照我需要的方式使用95%的代码来使用这一小段代码来丢弃任何不需要的结果:
if (value.club_id != verein1){
results.splice(index,1)
}
问题是,我不幸地发现,onResult回调仅被调用为新搜索。 TokenInput插件缓存搜索/结果以减少服务器负载。因此,当我在第二个框中输入第一个字符时,它会触发搜索,调用onResult并正确过滤我的结果。所以一切似乎都很好。但是如果我删除第一个字符并再次键入它,插件将使用缓存的结果而onResult不会被调用,结果显示为未过滤。这意味着,如果我在第一个框中输入一个俱乐部,然后在第二个框中搜索一个团队,则所有内容都会被正确过滤。但是,如果我然后决定删除俱乐部并输入另一个俱乐部(因为我选择了错误的俱乐部),团队的结果将不再被正确过滤,因为每当搜索字符串出现两次时,插件就会抛出缓存的搜索结果。 顺便说一句:缓存的结果是原始的,未经过滤的结果,而不是通过我之前的过滤得到的结果数组。
现在我不确定这是不是一个错误,或者它是否打算采用这种方式,并且我努力改变插件的源代码以改变它们也没有任何成功。