NativeScript ListView Ошибка при обновлении / изменении массива зависит от - PullRequest
0 голосов
/ 26 марта 2019

Я создаю приложение чата с nativescript, где я могу загружать больше сообщений определенным методом. Эти вновь загруженные сообщения добавляются в начало массива messages. Теперь, как только меняется массив сообщений, из которого список получает свои элементы, он выдает ошибку:

ОШИБКА TypeError: Невозможно прочитать свойство 'length' из неопределенного`

    ERROR CONTEXT {
JS:   "view": {
JS:     "def": {
JS:       "nodeFlags": 38518785,
JS:       "rootNodeFlags": 1,
JS:       "nodeMatchedQueries": 0,
JS:       "flags": 0,
JS:       "nodes": [
JS:         {
JS:           "nodeIndex": 0,
JS:           "parent": null,
JS:           "renderParent": null,
JS:           "bindingIndex": 0,
JS:           "outputIndex": 0,
JS:           "checkIndex": 0,
JS:           "flags": 1,
JS:           "childFlags": 38518785,
JS:           "directChildFlags": 33554433,
JS:           "childMatchedQueries": 0,
JS:           "matchedQueries": {},
JS:           "matchedQueryIds": 0,
JS:           "references": {},
JS:           "ngContentIndex": null,
JS:           "childCount": 2,
JS:           "bindings": [],
JS:           "bindingFlags": 0,
JS:           "outputs": [],
JS:           "element": {
JS:             "ns": "",
JS:             "name": "StackLayout",
JS:             "attrs": [],
JS:             "template": null,
JS:             "componentProvider": null,
JS:             "componentView": null,
JS:             "componentRendererType": null,
JS:             "publicProviders": {},
JS:             "allProviders": "[Ci...

Это мой метод

this.moreMessagesSub = this.socket.more_messages_receiver$.subscribe(
(messages: Message[]) => {
  this.currentRoom.messages = messages.concat(this.currentRoom.messages); // This leads to the error.
  this.listViewComponent.nativeElement.notifyPullToRefreshFinished();
  this.changeRef.detectChanges();
 }
);

И здесь я покажу вам свой просмотр списка.

 <StackLayout row="0" col="0" colSpan="2">
        <RadListView #chatListView pullToRefresh="true" (pullToRefreshInitiated)="onPullToLoadMore()" [items]="currentRoom.messages" separatorColor="white" height="100%">
            <ng-template tkListItemTemplate let-message="item" let-i="index">
                <StackLayout>

                    <ns-chat-message [message]="message" ></ns-chat-message>

                </StackLayout>
            </ng-template>
        </RadListView>
    </StackLayout>

Когда я удаляю строку this.currentRoom.messages = messages.concat(this.currentRoom.messages); Я не получаю ошибок. Я также попытался использовать array.unshift, но это точно такой же результат. Так почему же просмотр списка nativescript теряет массив при обновлении? Это, очевидно, просто на очень короткий промежуток времени. После ошибки и некоторого отставания она продолжает работать как ожидалось и даже успешно добавила сообщения в операционную систему

...