WinJS AutoSuggestBox сохранить выбранное предложение

Я использую WinJS.UI.AutoSuggestBox. Каждый раз, когда я выбираю элемент из OfferingCollection, этот элемент появляется на входе, но когда я нажимаю где-то еще (ввод теряет фокус), этот элемент исчезает из ввода, а мой поисковый текст возвращается в ввод.

То же, что и в примере: http://winjs.azurewebsites.net/#searchbox.

Как сделать так, чтобы мой выбранный текст сохранялся в AutoSuggestBox после потери фокуса?

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


person Milos    schedule 07.05.2016    source источник


Ответы (1)


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

Кстати, если у вас есть действительно веские причины взломать его, вот как:

1. Вам нужно сохранить где-нибудь выбранное предложение:

var lastQuery; 

function querySubmittedHandler(eventObject) {
    var queryText = eventObject.detail.queryText; 
    lastQuery = queryText;
    ...
}

2. Вам нужно подписаться на событие onblur в элементе управления вводом. Это сложно, так как этот элемент управления создается динамически:

var box;
WinJS.UI.processAll().then(function(){
    box = document.getElementById("autoSuggestBox"); 
    // this is how to get internal input
    box.winControl.element.querySelector("input").onblur = onblurinput; 
    // alternative
    // document.querySelector("#autoSuggestBox input").onblur = onblurinput;
});

3. Внутри onblurhandler вручную обновить текстовое значение ввода:

function onblurinput() {
    box.winControl.queryText = lastQuery;  
}
person Konstantin    schedule 08.05.2016
comment
Спасибо, это работает. Я думал, что это будет проще. Я всегда ожидаю, что AutoSuggestBox работает как предложение поиска Google, а не так. - person Milos; 08.05.2016
comment
Можно ли поместить идентификатор с каждым строковым значением в AutoSuggestBox. Я вижу, что он принимает массив, но он не будет работать с массивом объектов. Может по какому-то шаблону? Я знаю, что это другой вопрос, но если ответ короткий, почему бы и нет. Спасибо ! - person Milos; 08.05.2016
comment
SuggestionList в примерах всегда представляет собой массив строк. Мне нужно поместить массив объектов, где я могу выбрать, какое свойство я хочу показать. Когда я помещаю объект в свой список предложений, я получаю сообщение об ошибке: Объект не поддерживает свойство или метод «toLowerCase». Это вообще возможно ? - person Milos; 08.05.2016
comment
Я думаю, что было бы лучше задать его как новый вопрос. - person Konstantin; 08.05.2016
comment
Новый вопрос был бы хорошим решением. Любая хорошая документация для AutoSuggestBox или WinS также приветствуется. - person Milos; 08.05.2016
comment
MSDN — единственная официальная документация по WinJS developer.microsoft.com/en-us/ окна/разработка/winjs - person Konstantin; 08.05.2016
comment
Чего я и боялся :). У меня всегда проблема узнать, что мне там нужно. - person Milos; 08.05.2016