typeahead.js — отображение всех предварительно выбранных датумов

Я использую typeahead.js (не Bootstrap 2.x! ) с набором данных local, в любой заданной точке не запрашиваются другие датумы. Я пытаюсь отображать все предложения, когда поле ввода сфокусировано, а затем просто фильтровать их по типу пользователя.

Этот вопрос касается той же потребности, но принятое решение полезно только в том случае, если у меня есть токен для поиска - в моем случае Я хочу показать все, а не только данные, которые имеют Uni* токены.

Можно ли это сделать недокументированным/непонятным методом или мне нужно взломать его источник?


person Alix Axel    schedule 12.09.2013    source источник


Ответы (1)


Я хотел добиться аналогичного результата, поэтому я взглянул на код с опережением ввода и кое-что взломал, см. ниже:

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

Пример html (я использую пользовательские привязки данных для нокаута, но вы поняли):

        <div class="col-md-12 input-group tt-dropdown-group">
            <input id="category" name="category" type="text" class="form-control" data-bind="
                attr: { placeholder: categoryCaption },
                typeahead: categories,
                typeaheadValueKey: 'Name',
                typeaheadValue: category,
                typeaheadDestroy: true" />
            <span id="category-drop" class="input-group-addon tt-dropdown-icon">
                <span class="glyphicon glyphicon-chevron-down"></span>
            </span>
        </div>

Пример javascript с использованием jQuery:

    $(".tt-dropdown-group .tt-dropdown-icon").on("click", function() {
        var $input = $(this).parent(".tt-dropdown-group").find("input.tt-query");
        var $toggleBtn = $(this);

        // these are all expected to be objects so falsey check is fine
        if (!$input.data() || !$input.data().ttView || !$input.data().ttView.datasets || !$input.data().ttView.dropdownView || !$input.data().ttView.inputView) {
            return;
        }

        var ttView = $input.data().ttView;

        var toggleAttribute = $toggleBtn.attr("data-toggled");

        if (!toggleAttribute || toggleAttribute === "off") {
            $toggleBtn.attr("data-toggled", "on");

            $input.typeahead("setQuery", "");

            if ($.isArray(ttView.datasets) && ttView.datasets.length > 0) {
                // only pulling the first dataset for this hack
                var fullSuggestionList = []; // renderSuggestions expects an suggestions array not an object
                $.each(ttView.datasets[0].itemHash, function(i, item) {
                    fullSuggestionList.push(item);
                });

                ttView.dropdownView.renderSuggestions(ttView.datasets[0], fullSuggestionList);
                ttView.inputView.setHintValue("");
                ttView.dropdownView.open();
            }
        }
        else if (toggleAttribute === "on") {
            $toggleBtn.attr("data-toggled", "off");
            ttView.dropdownView.close();
        }
person Pricey    schedule 27.09.2013
comment
Спасибо, этот хак, кажется, работает. Проблема, с которой я сталкиваюсь, заключается в том, что при первом нажатии открывается раскрывающийся список, но при повторном нажатии он выбирает первый элемент в раскрывающемся списке. В любом случае, чтобы он ничего не выбирал, если пользователь не щелкнул элемент из списка? - person Guy; 21.10.2013
comment
Кроме того, переключение данных не установлено правильно, когда вы размываете раскрывающийся список и просто щелкаете в любом месте страницы (поэтому, когда вы щелкаете в любом месте и меню закрывается, вам нужно дважды щелкнуть, чтобы оно снова открылось). Есть идеи, как это исправить? - person Guy; 21.10.2013
comment
@ Парень, я еще не тратил на это больше времени, как я уже упоминал Its still is a bit buggy with handling placeholders and closing the dropdown when you click away, если у меня будет шанс, я посмотрю на его улучшение. Идея публикации этого состояла в том, чтобы дать хороший пример того, где данные могут быть найдены внутри typeahead и предварительной выборки полного списка данных, потому что это заняло намного больше времени, чтобы отследить... не как полностью отполированную реализацию раскрывающегося списка. - person Pricey; 21.10.2013
comment
кто бы ни проголосовал за это, пожалуйста, скажите, почему, поскольку он отвечает на исходный вопрос плаката, но от них зависит, пометят ли они его как ответ ... другого ответа также нет, и я почти уверен, что часами копаюсь в коде ввода текста, не Я не заслуживаю отрицательного ответа без всякой причины, когда эта информация показана здесь, чтобы помочь, особенно если это происходит только из-за ошибочной реализации переключения данных, которая не имеет отношения к вопросу. - person Pricey; 21.10.2013
comment
Благодарю. На самом деле мне удалось немного улучшить его, удалив весь код, относящийся к атрибуту переключения данных. Теперь это работает довольно хорошо. У меня это срабатывает, когда пользователь нажимает на ввод текста, у меня нет значка шеврона в моей реализации - person Guy; 21.10.2013