1

我正在使用 angular-ui ui-scroll,当我向下滚动时它很棒,不断按预期添加项目。但是,当我向上滚动时,它会停在我加载的最后一批的顶部。例如,如果我有 100 个项目并且我的缓冲区大小为 10,并且我向下滚动以显示项目 61-70,那么当我向上滚动时,我想查看项目 51-60。但是我无法向上滚动超过第 61 项。我不知道我做错了什么。

这是html:

<div row="row" ui-scroll="row in transactionSource" buffer-size="10" >{{row.data}}</sq-transaction>

这是脚本:

        $scope.transactionSource = {

        get: function (index, count, callback) {
            if (index < 0) {
                callback([])
           }
            else {
                var buffer = 10;
                var end = ctrl.nextIndex + buffer;
                if (end > ctrl.transactions.length) end = ctrl.transactions.length;
                var items = ctrl.transactions.slice(ctrl.nextIndex, end);
                ctrl.nextIndex = end;

                callback(items);
            }
       }
    };

如果它是相关的,当我 console.log 接收到的索引和计数值时,在第一次加载 10 后,我得到一个索引 -9 (在这种情况下,我返回一个空数组 - 如果我不这样做,整个数组被加载)。当我向上滚动时,我根本没有收到 console.log 消息,所以就像“get”只有在向下滚动时才会被调用。

提前感谢您的任何帮助。

4

1 回答 1

0

您的数据源看起来不对。检索项目(在您的情况下进行切片)应基于您从datasource.get方法参数中获得的索引计数参数。我想发布一个数据源实现的示例,其中结果项数组被限制在 0 到 100 之间,并且应该从一些外部数据数组中切片:

get: function(index, count, success) {
    var result = [];
    var start = Math.max(0, index);
    var end = Math.min(index + count - 1, 100);
    if (start <= end) {
        result = externalDataArray.slice(start, end + 1);
    }
    success(result);
};

希望能帮助到你!

于 2017-09-07T03:31:42.840 回答