2017-02-20 4 views
1

Мне нужен простой ввод для ввода тегов. MultiSelect не позволяет мне вводить специальный ввод. Кажется, это разрешает выбор элементов, уже доступных в раскрывающемся списке.Kendo UI tags input

http://demos.telerik.com/kendo-ui/multiselect/tag-mode

Я попытался AutoComplete. Он позволяет вводить запятую, но не имеет CSS тегов с близким значком для каждого тега.

Управление в this page - это то, что мне нужно. Но для ASP.net AJAX. Я не мог найти аналогичный пример для jQuery

Почему такой распространенный сценарий настолько расстраивает, что он реализуется в пользовательском интерфейсе Kendo?

+0

Что вы имеете в виду с * «не имеет CSS тегов с близкими значок для каждого тега» *? – DontVoteMeDown

+0

Пожалуйста, проверьте ссылку на этой странице. Введите что-то и нажмите вкладку. посмотрите, как слово, которое вы набрали, имеет фон и «X», которые вы можете щелкнуть, чтобы удалить элемент? Это поведение, которое я ищу. – Koder

+0

* MULTIPLE TAG MODE * Пример многоцелевой ссылки, которую вы опубликовали, кажется довольно близким * ссылкой на эту страницу *, не так ли? – DontVoteMeDown

ответ

0

Я подготовил додзё пример, основанный на некоторый код, я сделал, чтобы добиться чего-то подобное:

http://dojo.telerik.com/orePO

Существует много поднятием здесь. Но в основном это загрузит ваш существующий список «тегов», и если введенное значение не будет найдено, оно предложит пользователю добавить его в коллекцию.

Важный кусок вот этот бит:

function addTag(widgetId, value) { 
     var widget = $('#' + widgetId).getKendoMultiSelect(); 
     var dataSource = widget.dataSource; 
     var item = { ProductID: 0, ProductName: value }; 
     dataSource.add(item); 
     widget.value(widget.value().concat([item.Value])); 

     dataSource.one("requestEnd", function(args) { 
        if (args.type !== "create") { 
         return; 
        } 

        var newValue = args.response[0].ProductID; 

        dataSource.one("sync", function() { 
         widget.value(widget.value().concat([newValue])); 
        }); 
       }); 

       dataSource.sync(); 



     var values = widget.dataItems(); 

     updateTagList(values); 


     return; 

    } 

Эта функция вызывается из NoDataTemplate шаблона, который определяется здесь:

<script id="noDataTemplate" type="text/x-kendo-tmpl"> 
     <div> 
      No data found. Do you want to add new item - '#: instance.input.val() #' ? 
     </div> 
     <br /> 
     <button class="k-button" onclick="addTag('#: instance.element[0].id #', '#: instance.input.val() #')">Add new item</button> 
    </script> 

Таким образом, когда пользователь вводит что-то, что не найден он предложит пользователю добавить элемент в коллекцию.

Я затем добавил некоторые сценарии, чтобы показать тег внизу в списке (только так вы можете видеть, что они добавлены. Поэтому я не буду вдаваться в том, что здесь.)

Я также настроил управление скрыть все теги под одним элементом tag, чтобы multiselect не произрастал неожиданно. Это можно изменить с помощью опции tagMode для мультиселектора.

Пожалуйста, обратите внимание, что эта опция только присутствует с 2016 Q3 (из памяти)

Если вам нужно что-нибудь еще объяснить/расширения на пожалуйста, дайте мне знать.

Также смотрите демо-версию для этой функции: http://demos.telerik.com/kendo-ui/multiselect/addnewitem

+0

Со всей этой сложностью я бы просто использовал select2. Я уже видел addnewitem - это не тот UX, который я хотел. MultiSelect предполагает, что пользователь добавляет новый элемент только изредка и выпадает, что он/она будет использовать большую часть времени. Это противоположно тегам, где большую часть времени пользователь вводит то, что ранее не было введено (по крайней мере, в моей учетной записи). Это делает вышеупомянутое решение очень непригодным.Жаль, что у Telerik нет такого часто заданного в их пакете. Я серьезно пересматриваю покупку. Lucky я столкнулся с этим ограничением всего несколько часов в моей судебной практике. – Koder

+0

Чтобы быть справедливым для Telerik по этому поводу, я думаю, что это очень «специфическое» требование, они дали вам возможности для достижения вашей задачи с функциональной точки зрения, но это не тот UX, который вы хотите. Нет ничего, что помешало бы вам предоставить решение с помощью инструментов, которые они предоставили, чтобы обеспечить ожидаемый опыт UX, поскольку инфраструктура может быть расширена. Вы всегда можете изменить этот пример, чтобы просто добавить элемент, когда пользователь нажимает 'enter' или виджет теряет фокус и т. Д. –

+0

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

Смежные вопросы