Javascript 使用KnockoutJS和单个AJAX调用实现无限滚动

Javascript 使用KnockoutJS和单个AJAX调用实现无限滚动,javascript,jquery,ajax,json,knockout.js,Javascript,Jquery,Ajax,Json,Knockout.js,在使用KnockoutJS时,我遇到了一种情况,需要使用jqueryajax从DB获取数据。得到响应后,我需要将JSON响应与viewmodel逐部分绑定,而不是绑定整个JSON。为此,我想使用Jquery无限滚动特性 我从之前发布的问题中找到了一些解决方案 但我的问题是,我只需要向DB发送一个调用,获取匹配的记录并将其逐部分绑定到viewmodel,而不是将整个响应推送到viewmodel中的items数组并绑定它 <div id="main" data-bind="foreach: i

在使用KnockoutJS时,我遇到了一种情况,需要使用jqueryajax从DB获取数据。得到响应后,我需要将JSON响应与viewmodel逐部分绑定,而不是绑定整个JSON。为此,我想使用Jquery无限滚动特性

我从之前发布的问题中找到了一些解决方案

但我的问题是,我只需要向DB发送一个调用,获取匹配的记录并将其逐部分绑定到viewmodel,而不是将整个响应推送到viewmodel中的items数组并绑定它

<div id="main" data-bind="foreach: items">
    <div data-bind="text: properties.MAPBLKLOT"></div>
</div>

<script>
var viewModel = {
    items: ko.observableArray([])
};

var url = 'testdata.json';
$.getJSON(url).done(function (items) {
    ko.utils.arrayForEach(items, function(item) {
        viewModel.items.push(item);
    });
});

ko.applyBindings(viewModel);
</script>

]

我以前从未这样做过,但如果我这样做了,想法将从您希望显示前X个项目的事实开始。假设您希望显示前50个项目,但一旦第45个项目可见,您就会希望显示前100个项目。然后你会这样写:

<!-- ko foreach: allElement -->
<!-- ko if: $index() < $root.lastVisibleElement() -->
... row by row here ... IMPORTANT (one element in row must have following) -> data-bind="attr:{id: $index()}"
<!-- /ko -->
<!-- /ko -->

之后,我会添加滚动事件监听器,运行一个函数检查id=lastVisibleElement-5的元素是否可见,如果可见,则将lastVisibleElement增加50。

您能更具体地说明您的问题吗?那么,你想一次推送整个响应而不是逐项推送吗?我不想在将viewmodel绑定到我的视图之前将整个响应推送到viewmodel,我想从响应中推送一组记录,比如说,如果我的响应有1000条记录,我想推送并绑定100条,每次用户滚动到页面底部。
<!-- ko foreach: allElement -->
<!-- ko if: $index() < $root.lastVisibleElement() -->
... row by row here ... IMPORTANT (one element in row must have following) -> data-bind="attr:{id: $index()}"
<!-- /ko -->
<!-- /ko -->