Динамическое автозаполнение в Rails с использованием плагина jQuery TokenInput - PullRequest
4 голосов
/ 06 мая 2011

Я использую отличный плагин TokenInput (http://loopj.com/jquery-tokeninput/) для рельсов, чтобы выполнить автодополнение и для нормального набора данных в модели, он работает просто чудесно. Но моя проблема в том, что в моем случае у меня естьфактически 2 текстовых поля, на которых я хочу его использовать, и предложения для второго должны зависеть от содержания первого. Более конкретно: мне нужно выбрать футбольный клуб (который я могу просто автозаполнить из всех существующих клубов в моей базе данных).), а затем команда, которая играла. Таким образом, автозаполнение для команды должно использовать только команды, связанные с уже выбранным клубом, и я совершенно не понимаю, как или даже если я могу сделать это в рельсах и с этим плагином (но плагин)само по себе не должно быть помехой.) Думаю, моя главная проблема в этом заключается в том, что у меня нет опыта работы с javascript, особенно в сочетании с rails. Кто-нибудь делал что-то подобное в своем приложении и мог бы помочь мне?

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Спасибо за ваш ответ. Я знал, что мне нужно использовать обратный вызов onResult, но думал в неправильном направлении. Таким образом, ваш ответ на самом деле помог мне понять мой подход правильно. Я заставил его работать на 95% так, как мне нужно, с этим небольшим кусочком кода, который отбрасывает нежелательные результаты:

if (value.club_id != verein1){
                        results.splice(index,1)     
                    }

Однако проблема в том, что мне, к сожалению, пришлось обнаружить, что обратный вызов onResult вызывается только для НОВЫХ поисков. Плагин TokenInput кэширует результаты поиска / результаты для уменьшения нагрузки на сервер. Поэтому, когда я ввожу первый символ во второе поле, он запускает поиск, вызывается onResult, и мои результаты фильтруются правильно. Так что все в порядке. Но если я удаляю этот первый символ и набираю его снова, плагин использует кэшированные результаты, и onResult НЕ вызывается, и результаты отображаются нефильтрованными. Это означает, что если я вхожу в клуб в своем первом окне, а затем ищу команду во втором поле, все фильтруется правильно. НО, если я тогда решу удалить Клуб и ввести другой (потому что я выбрал неправильный, например), результаты для команд больше не будут фильтроваться правильно, потому что плагин добавляет кешированные результаты поиска каждый раз, когда строка поиска появляется дважды , Кстати, кэшированные результаты - это необработанные, нефильтрованные результаты, а не массив результатов, прошедших мою предыдущую фильтрацию.

Теперь я не уверен, является ли это ошибкой или она должна быть такой, и мои усилия изменить исходный код плагина для изменения тоже не имеют успеха.

1 голос
/ 06 мая 2011

Ваш вопрос может иметь много разных крайних случаев. Посмотрите на метод tokenInput ' onResult '.

Возможно, вы могли бы получить текущие значения из первого поля ввода (input-1) и оценить возвращенный json для input-2 против input-1 и отфильтровать те, которые вам не нужны. Вы, очевидно, должны были бы включить необходимые элементы id для фильтрации в массиве json, который создает rails.

<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>

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это всего лишь идея.

Надеюсь, это поможет.

...