好的,SlickGrid 没有任何内置功能,所以我们必须自己滚动它。这是stackoverflow的一个答案:
现在这是我的解决方案,它很有效,我认为这很容易。这方面的技术栈是:
- 乌鸦数据库
- 南希FX
- 咖啡脚本
- SlickGrid
咖啡脚本
loadData=(grid)->
take = 600
loadingGlyph = $ "<img/>", {class:"loading", style:"float:right;margin-top:5px", src:"/Content/img/ajax-loader.gif", alt:"loading", width:"16", height:"16"}
$(".slick-pager-status").after loadingGlyph
for skip in [0..viewdata.UserCount] by take
$.getJSON("/users/#{skip}/#{take}")
.done (users) =>
grid.addRows users
$(".loading").hide() if users.length < take
$ ->
columns = [..your columns..]
grid = [..your slick-grid..]
loadData grid
首先,我贴上一个精美的加载字形图形来显示网格很忙。请注意,我打算异步加载批量数据。这将很快将网格置于可用状态(在第一批返回后),但需要告知用户数据仍在后台下载。
为了批量加载数据,我以块的形式循环,其大小由值确定take
并终止于该viewData.UserCount
值。这已在请求页面时预先填充,并且是可用项目的总数(或您希望加载的最大值)。
最后,我使用了addRows
添加到我的 slick-grid 包装器中的方法(未显示)。这允许快速添加行批次,它看起来像这样:
扩展 Slick-Grid
addRows:(rows)->
dataView.beginUpdate()
dataView.addItem row for row in rows
dataView.endUpdate()
为了完整起见,这里是其余的过程,包括进行批量数据检索的 RavenDB 服务调用。
NancyFX 模块
Get["/users/{skip}/{take}"] = parameters =>
{
var skip = (int)parameters.skip;
var take = (int)parameters.take;
var data = UserService.GetForGrid(Db, skip, take);
return Response.AsJson(data);
};
RavenDB 服务
public static List<UserGridDTO> GetForGrid(IDocumentSession db, int skip=0, int take=512)
{
return db.Query<User>()
.OrderBy(u=>u.Id)
.Skip(skip)
.Take(take)
.ToList()
.Select(user =>
new UserGridDTO
{
id = user.Id,
Email = user.Email,
Name = user.DisplayName,
})
.ToList();
}