【发布时间】:2013-04-13 03:56:35
【问题描述】:
我有一个返回所有用户列表的脚本。我想要:
- 根据返回的数据设置 viewModel 的 totalUsers 和页面属性。
- 遍历用户列表并将最后一个用户对象推入 observableArry
- push() 方法将用户添加到已加载和显示的用户中
目的 我实际上想统计所有用户,因为我将在一个页面加载 20 个用户,当我到达页面底部时,我会检查是否还有更多用户要加载,然后再加载它们。这样,如果我有 400 个用户 - 他们不会一次全部加载并占用时间。
剔除 JS 文件
$.views.Roster.RosterViewModel = function (data) {
var self = this;
self.RosterUsers = ko.observableArray([]);
_rosterUsers = self.RosterUsers;
self.currentPage = ko.observable(1);
self.toDisplay = ko.observable(20);
self.filteredRoster = ko.computed(function(){
var init = (self.currentPage()-1)* self.toDisplay(),
filteredList = [],
rosterLength = self.RosterUsers().length,
displayLimit = self.toDisplay();
if(rosterLength == 0)
return[];
for(var i = init; i<(displayLimit + init) - 1 && i<rosterLength; i++)
{
filteredList.push(self.RosterUsers()[i]);
}
return filteredList;
}),
totalRoster = ko.computed(function () {
return self.RosterUsers().length;
}),
changePage = function (data) {
currentPage(data);
},
next = function () {
if ((self.currentPage() * self.toDisplay()) > self.RosterUsers().length)
return;
self.currentPage(self.currentPage() + 1);
},
prev = function () {
if (self.currentPage() === 1)
return;
self.currentPage(self.currentPage() - 1);
},
$.views.Roster.RosterViewModel.AddUsers(data);
};
HTML 查看页面
<script type="text/html" id ="grid">
<section id="rosterImages" style=" float:left">
<section id="users">
<div id="nameImage">
<figure id="content">
<img width="158" height="158" alt="Gravatar" data-bind="attr:{src: GravatarUrl}"/>
<figcaption>
<a title="Email" id="emailIcon" class="icon-envelope icon-white" data-bind="attr:{'href':'mailto:' + Email()}"></a>
<a title="Profile" id="profileIcon" class="icon-user icon-white"></a>
</figcaption>
</figure>
<p data-bind="text:Name"></p>
</div>
</section>
</section>
</script>
<ul>
<li><a href="#" data-bind="click: prev">Prev</a></li>
<!-- ko foreach: ko.utils.range(1, totalRoster()/toDisplay() + 1) -->
<li><a href="#" data-bind="text: $data, click: $parent.changePage"></a></li>
<!-- /ko -->
<li><a href="#" data-bind="click: next">Next</a></li>
</ul>
更新:滚动脚本
$(window).scroll(function () {
if ($(window).scrollTop() == $(document).height() - $(window).height()) {
if (parseInt($.views.Roster.RosterViewModel.currentPage(), "10") * 20 < parseInt($.views.Roster.RosterViewModel.totalRoster(), "10")) {
$.views.Roster.RosterViewModel.next();
}
}
});
我怎样才能用我已经拥有的东西来添加这些东西?提前感谢您的帮助。
【问题讨论】:
-
您是否打算在客户端分页数据?我的意思是,您是否打算让所有用户在客户端设置寻呼机?或者您的服务器是否正在获取您所在页面的数据等?
-
@sujeshArukil 是在客户端 - 这是开始的过程,因为我将添加一个滚动功能,该功能将在下一批用户滚动时加载,并且数组中仍有用户。
-
也许我从未见过这个。 ajax 请求中的“限制”选项。它是什么?我真的找不到任何文档。
-
@sujeshArukil 我在某人的教程中看到了它:strathweb.com/2012/03/…
-
看起来不错。本教程将其传递到数据对象中,而不是作为 $.ajax 自身的限制选项。如果您说服务器正在返回所有记录并且不关心页面和页面大小,对吗?在这种情况下,您的 ajax 将返回所有数据,您将计算附加到模型以获取计数。
标签: javascript knockout.js knockout-2.0