使用异步JQuery请求和RavenDB将大量行加载到SlickGrid中
我需要将>10k行数据加载到 我相信SlickGrid就是为这种用途而设计的,它基于以下加载500000个客户端行的官方示例: 由于我不能违反RavenDB的“安全第一”规则,该规则规定每个会话查询返回的行数少于1024行,因此我使用了RavenDB的skip-take机制,该机制允许web客户端以每个http请求256行的比特大小块从服务器收集所有10K行 我的问题是:当这些行从服务器返回时,最好的方法是什么?SlickGrid是否主动支持异步加载这样的分块数据子集 我正在寻找:使用异步JQuery请求和RavenDB将大量行加载到SlickGrid中,jquery,coffeescript,ravendb,slickgrid,Jquery,Coffeescript,Ravendb,Slickgrid,我需要将>10k行数据加载到 我相信SlickGrid就是为这种用途而设计的,它基于以下加载500000个客户端行的官方示例: 由于我不能违反RavenDB的“安全第一”规则,该规则规定每个会话查询返回的行数少于1024行,因此我使用了RavenDB的skip-take机制,该机制允许web客户端以每个http请求256行的比特大小块从服务器收集所有10K行 我的问题是:当这些行从服务器返回时,最好的方法是什么?SlickGrid是否主动支持异步加载这样的分块数据子集 我正在寻找: 允许我发出下
grid.appendRows(行子集)
该网格设计用于处理大型客户端数据集,或者在更为网格化的常用按需页面服务器模型中工作。我想使用以前的客户端方法,因为它会带来卓越的用户体验,imho
免责声明:我知道我正在加载大量行,通常的方法是根据需要从服务器请求每个页面。无论这种方法多么值得称赞,这都不是我想要实现的目标。相反,我故意尝试从服务器加载整个数据集,这样不会给用户带来不便
感谢SlickGrid不包含任何用于加载或保存数据的内置功能(不包括示例slick.remotemodel.js,该示例仅作为如何使用SlickGrid API的示例)。这取决于实现SlickGrid的开发人员。好的,SlickGrid没有任何内置功能,所以我们必须自己开发。以下是stackoverflow的一个答案:
- 乌鸦
- 南茜
- 咖啡脚本
- 光滑网格
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
为了完整起见,下面是流程的其余部分,包括执行批处理数据检索的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);
};
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();
}
RavenDB服务
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);
};
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();
}
publicstaticlist GetForGrid(idocumentsessiondb,int skip=0,int take=512)
{
返回db.Query()
.OrderBy(u=>u.Id)
.Skip(Skip)
.拿(拿)
托利斯先生()
.选择(用户=>
新用户griddto
{
id=user.id,
Email=user.Email,
Name=user.DisplayName,
})
.ToList();
}
显示所有10k行的目的是什么?如果这是一个演示的东西,那么显示小集合就足够了。另一方面,如果是为了生成文件内容,则在网页中显示不太可能是最佳解决方案。SlickGrid足够聪明,可以在添加/删除浏览器dom节点时管理正确行的优化显示。在客户端缓存所有行意味着我可以利用所有这些优点,再加上slickgrid在快速客户端上的过滤、排序等功能,而不是与服务器闲聊。我将前256行添加到slick网格,下载剩余的,然后更新网格。用户得到了一个即时可用的网格,大约5秒后他们就有了完整的数据集。我会重新考虑你的方法。这有点违背了基于ajax的解决方案的目的,因为在页面加载上也可以实现同样的效果,但我要说的是a)您永远不应该向只需要10条记录的用户发送10万条记录(或者我听到了你的建议,通常我会同意,但在这种情况下,我的问题仍然是:鉴于SlickGrid设计用于处理大型内存数据集(前提是500000行加载到客户机内存中),它是否提供了一种内在机制来帮助通过一些异步批处理加载过程构建这样的内存数据集?