как работает нативный скрипт Radlist View Load по требованию - PullRequest
0 голосов
/ 30 июня 2019

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

У меня был список из 1000 или более данных, хранящихся в таблице данных.знаю, что я хочу отобразить его в виде списка, но я не хочу читать все данные сразу.потому что у меня есть изображения, хранящиеся в другом каталоге, и я хочу прочитать это тоже.Таким образом, для 20-30 данных производительность довольно хорошая.но для 1000 данных требуется более 15 минут, чтобы прочитать данные, а также изображения, связанные с ними.так как я храню некоторые изображения высокого качества.

Поэтому я решил прочитать только 20 данных с соответствующими изображениями.и отобразить его в списке.знать, когда пользователь достигает 15-й данные списка.Я решил прочитать еще 10 данных с сервера.

знаю, когда я искал это, я сталкивался с "RadListView Load on Demand".тогда я просто посмотрел на код ниже.

public addMoreItemsFromSource(chunkSize: number) {
    let newItems = this._sourceDataItems.splice(0, chunkSize);
    this.dataItems.push(newItems);
}

public onLoadMoreItemsRequested(args: LoadOnDemandListViewEventData) {
    const that = new WeakRef(this);
    const listView: RadListView = args.object;
    if (this._sourceDataItems.length > 0) {
        setTimeout(function () {
            that.get().addMoreItemsFromSource(2);
            listView.notifyLoadOnDemandFinished();
        }, 1500);
        args.returnValue = true;
    } else {
        args.returnValue = false;
        listView.notifyLoadOnDemandFinished(true);
    }
}

В nativescript, если я хочу получить доступ к элементу XML элемента привязки.я должен использовать наблюдаемые в viewmodel или exports.com_name в связанном js-файле.

но в этом примере это начинается с public ..!как использовать это в JavaScript.

Что нового WeakRef (это)?зачем это нужно?

как определить, что пользователь прокрутил до 15 данных, как я хочу загрузить больше данных, когда он пришел к 15-м данным.

после получения данных, как обновить массив спискаи показать его в виде списка?

Наконец, я просто хочу знать, как использовать нагрузку по требованию

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

Помните, что я более свежий. Так что, пожалуйста, помните об этом при ответе.спасибо,

, пожалуйста, измените вопрос, если считаете, что он не соответствует стандартам.

Ответы [ 2 ]

0 голосов
/ 07 июля 2019

Вы можете проверить обновленный ответ здесь https://play.nativescript.org/?template=play-js&id=1Xireo

0 голосов
/ 30 июня 2019

TypeScript to JavaScript

Вы можете использовать любой TypeScript компилятор для преобразования исходного кода в JavaScript.Есть даже онлайн-компиляторы, например, официальная TypeScript Playground .

На мой взгляд, трудно ожидать больше примеров ES5.В ES6-9 появилось много новых функций, которые значительно упрощают разработку JavaScript, а TypeScript выводит JavaScript на новый уровень, переводчик в компилятор.

Чтобы ответить на ваш вопрос, вы будете использовать цепочку прототипов для определения методов в вашемкласс в ES5.

YourClass.prototype.addMoreItemsFromSource = function (chunkSize) {
    var newItems = this._sourceDataItems.splice(0, chunkSize);
    this.dataItems.push(newItems);
};

YourClass.prototype.onLoadMoreItemsRequested = (args) {
    var that = new WeakRef(this);
    var listView = args.object;
    if (this._sourceDataItems.length > 0) {
        setTimeout(function () {
            that.get().addMoreItemsFromSource(2);
            listView.notifyLoadOnDemandFinished();
        }, 1500);
        args.returnValue = true;
    } else {
        args.returnValue = false;
        listView.notifyLoadOnDemandFinished(true);
    }
}

Если вы используете синтаксис fromObject для своего Observable, то эти функции могут быть переданы внутрь

addMoreItemsFromSource: function (chunkSize) {
    ....
};

WeakRef: Itпомогает эффективно управлять памятью, сохраняя свободную ссылку на цель, читайте больше на документах .

Как загрузить больше:

Если выустановите loadOnDemandMode на Auto, тогда событие loadMoreDataRequested будет срабатывать всякий раз, когда пользователь достигает конца прокрутки.

loadOnDemandBufferSize определяет, сколько элементов до конца прокрутки должно быть вызвано событием.

Подробнее о документы .

Как обновить массив:

Это именно то, что продемонстрировано в функции addMoreItemsFromSource.Используйте .push(item) в ObservableArray, который связан с вашим списком.

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