ObservableArray.push () не уведомляет представление - PullRequest
0 голосов
/ 06 декабря 2018

Я создаю список элементов, предлагаемых в панели поиска автозаполнения, стандартным образом:

Screenshot of an autocomplete component for nativescript-ui Элементы перечислены в типе данных ObservableArray.

Я хотел бы постепенно заполнять элементы предложений, помещая их один за другим в ObservableArray с условием:

page.bindingContext.set("suggestionItems", new ObservableArray([]));

for (let i = 0; i < source.length; i++){
    if ( conditionMet(source[i]) ){
        page.bindingContext.suggestionItems.push(
             new autocompleteModule.TokenModel(source[i])
        );
    }
}

console.log("Items for suggestion: " + page.bindingContext.suggestionItems);

Однако этот метод не работает.Никакие пункты никогда не перечислены под строкой поиска.Хотя console.log () показывает хорошо заполненный массив ObservableArray в bindingContext:

Items for suggestion: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

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

let tempItems = [];
for (let i = 0; i < source.length; i++){
    if ( conditionMet(source[i]) ){
        tempItems.push(
             new autocompleteModule.TokenModel(source[i])
        );
    }
}

page.bindingContext.set("suggestionItems", new ObservableArray(tempItems));

console.log("Items for suggestion: " + page.bindingContext.suggestionItems);

Так что теперь, если я хочу нажать на элемент, мне нужнозаменить весь ObservableArray с нуля ...

Обратите внимание, что для временного решения вывод console.log () такой же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...