Я пытаюсь настроить элемент управления djFilteringSelect в XPages, чтобы, когда пользователь вводит запрос, он находил любое вхождение последовательности символов, а не только с самого начала.
поэтому, если элементы выбора содержат значение «это продукт», и я набираю продукт, это должно совпадать. по умолчанию он ищет только с начала текста.
есть свойство queryExpr, которое можно использовать для этого, но отсутствует документация для использования в XPages. Я пробовал следующее и многое другое, но не могу заставить его работать.
<xe:this.queryExpr><![CDATA[#{javascript:"*{0}*"}]]></xe:this.queryExpr>
<xe:this.queryExpr><![CDATA[#{javascript:"$*{0}*"}]]></xe:this.queryExpr>
<xe:djFilteringSelect id = "djFilteringSelect1">
<xp:selectItems id = "selectItems2">
<xp:this.value><![CDATA[#{javascript:var products = @DbLookup("","LookUp", "Produkt", 2);
products = @Unique(@Trim(products));
return products.sort();}]]></xp:this.value>
</xp:selectItems>
</xe:djFilteringSelect>
вот полный пример, если кто-то хочет скопировать / вставить в новый XPage, я хочу ввести «x», и должна появиться запись «my name is x»
<?xml version = "1.0" encoding = "UTF-8"?>
<xp:view xmlns:xp = "http://www.ibm.com/xsp/core"
xmlns:xc = "http://www.ibm.com/xsp/custom"
xmlns:xe = "http://www.ibm.com/xsp/coreex">
<xe:djFilteringSelect id = "djFilteringSelect1">
<xp:selectItem itemLabel = "my name is x"></xp:selectItem>
<xp:selectItem itemLabel = "my name is y"></xp:selectItem>
<xp:selectItem itemLabel = "my name is z"></xp:selectItem>
</xe:djFilteringSelect>
</xp:view>
djFilteringSelect — это просто оболочка для компонента Dojo FilteringSelect, поэтому queryExpr
и searchExpr
просто используются для передачи базовому (клиентскому) коду JavaScript. Так что для документации хорошим источником является сайт Dojo. Согласно документации API *${0}*
должен делать то, что вы хотите (https://dojotoolkit.org/api/?qs=1.6/dijit/form/FilteringSelect). Документы говорят о сочетании с highlightMatch для определения того, что выделено.
звезды в комментарии удалены stackoverflow :-)
Мы используем djFilteringSelect
в нашем приложении, и оно работает так, как задумано. Единственное, что следует отметить, это то, что некоторые символы в строке должны быть экранированы: поэтому правильными значениями для queryExpr
являются "*\$\{0\}*"
.
Объяснение, почему $
и {}
должны быть экранированы, можно найти здесь https://xcellerant.wordpress.com/2014/07/22/change-search-behavior-of-dojo-filtering-select-in-xpages/
спасибо, можете ли вы добавить полный пример на основе моего примера выше, потому что я не мог заставить его работать
@ThomasAdrian это работает: <xe:djFilteringSelect id = "djFilteringSelect1" queryExpr = "#{javascript:return '*\$\{0\}*';}" autoComplete = "false">
спасибо, но я уже пробовал это, это просто портит раскрывающийся список <xe:djFilteringSelect id = "djFilteringSelect1" queryExpr = "${0}">