Итак, я установил плагин автозаполнения:
tns plugin add nativescript-ui-autocomplete
И добавил представление в мой XML:
<Page xmlns="http://schemas.nativescript.org/tns.xsd"
xmlns:au="nativescript-ui-autocomplete" loaded="pageLoaded" class="page">
<StackLayout class="p-20">
<au:RadAutoCompleteTextView id="autoComplete" items="{{ items }}" suggestMode="Suggest" displayMode="Token">
<au:RadAutoCompleteTextView.suggestionView>
<au:SuggestionView suggestionViewHeight="300">
<au:SuggestionView.suggestionItemTemplate>
<StackLayout tap="{{tokenSelected}}">
<Label text="{{ text }}" />
</StackLayout>
</au:SuggestionView.suggestionItemTemplate>
</au:SuggestionView>
</au:RadAutoCompleteTextView.suggestionView>
</au:RadAutoCompleteTextView>
</StackLayout>
Я также добавил функцию к событию касания в стеке предложения и добавил элементы в RadAutoCompleteTextView:
var Observable = require("data/observable").Observable;
var ObservableArray = require("data/observable-array").ObservableArray;
var autocompleteModule = require("nativescript-ui-autocomplete");
var page;
var pageData = new Observable();
var items = new ObservableArray([]);
exports.pageLoaded = function (args) {
page = args.object;
page.bindingContext = pageData;
const persons = ["Sjoerd Pottuit", "Sjoerd Pottuit", "David Lamp", "Ryan Tulp"];
for (var i = 0; i < persons.length; i++) {
items.push(new autocompleteModule.TokenModel(persons[i]));
};
pageData.set("items", items);
pageData.set("tokenSelected", tokenSelected);
};
function tokenSelected(args) {
//how to know which Sjoerd Pottuit is selected?
const person = args.view.bindingContext.text;
console.dir(args);
console.log(person); // returns: JS: Sjoerd Pottuit
};
Проблема в том, что функция tokenSelected не возвращает индекс выбранного элемента, а RadAutoCompleteTextView принимает только объекты типа TokenModel, которые могут содержать только текст и изображение для отображения в качестве результата поиска.
Мне нужен индекс, чтобы я мог получать больше данных от выбранного человека из другого массива.
console.dir (арг); вернулся:
JS: ==== object dump start ====
JS: type: "1"
JS: view: StackLayout(10)@file:///app/main-page.xml:8:25;
JS: android: MotionEvent { action=ACTION_UP, actionButton=0, id[0]=0, x[0]=230.0, y[0]=44.0, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=617931691, downTime=617931598, deviceId=3, source=0x1002 }
JS: ios: "undefined"
JS: object: StackLayout(10)@file:///app/main-page.xml:8:25;
JS: eventName: "tap"
JS: ==== object dump end ====