javascript - 使用 ajax 的光滑网格示例

标签 javascript ajax gridview slickgrid

我正在寻找一个关于如何在尝试通过 jQuery.Ajax 以 Json 形式检索数据时使用 SlickGrid 的简单示例。我也无法找到 SlickGrid 插件的任何文档,并且想知道我是否只是找错了地方。任何帮助我开始使用 SlickGrid 的帮助将不胜感激。

最佳答案

我一直在写一个ajax slick-grid。它进展顺利,所以这绝对是一个值得追求的想法。

我使用了skip-take模型来批量提取大量数据。我还为光滑网格的设置和操作编写了一个包装 Grid 类,以便更容易重用。

下面是一些代码,希望可以帮助您入门。我已将其删减以使其专门针对您的 AJAX 加载问题。真正的网格使用列过滤器和复选框选择器,这两者都非常值得研究,但会混淆回复。

语法是 CoffeeScript,但我相信您能明白。

SlickGrid 包装器

class Grid
    grid = null
    dataView = null
    options = {
        enableCellNavigation: true,
        explicitInitialization: true
    }

    constructor:(@gridId, @pagerId, @columns, loadData)->
        @setupDataView()
        @setupGrid()
        @setupPager()
        grid.init()
        loadData()

    setupDataView:() ->
        dataView = new Slick.Data.DataView()
        dataView.onRowCountChanged.subscribe(->
            grid.updateRowCount()
            grid.render()
        )
        dataView.onRowsChanged.subscribe((e, args)->
            grid.invalidateRows(args.rows)
            grid.render()
        )

    setupGrid:()->
        grid = new Slick.Grid(@gridId, dataView, @columns, options)
        grid.setSelectionModel(new Slick.RowSelectionModel())

    setupPager:() ->
        dataView.setPagingOptions({ pageSize: 25 });
        pager = new Slick.Controls.Pager(dataView, grid, $(@pagerId));

    addRows:(rows)->
        dataView.beginUpdate()
        dataView.addItem row for row in rows 
        dataView.endUpdate()

实现用户网格的包装器

viewdata = $('#viewdata').data('viewdata')
take = 800
grid = null
loadingGlyph = '<img class="loading" style="float:right;margin-top:5px" src="/Content/img/ajax-loader.gif" alt="loading" width="16" height="16"/>'

columns = [
    { id: 'last name', name: 'Last Name', field: 'LastName', sortable:true },
    { id: 'first name', name: 'First Name', field: 'FirstName', sortable:true },
    { id: 'email', name: 'Email', field: 'Email', sortable:true }
]

loadData=() =>
    $('.slick-pager-status').after(loadingGlyph)
    for skip in [0..viewdata.count] by take
        url = '/' + viewdata.id + '/users/' + skip + '/' + take
        $.getJSON(url, (users) ->
            grid.addRows(users)
            $('.loading').hide() if users.length < take
        )

$ -> 
    grid = new Grid('#user-grid', '#user-pager', columns, loadData)

HTML

<div style="margin: 10px;">
    <div id="user-grid" style="width: 100%; height: 700px;"></div>
    <div id="user-pager" style="width: 100%; height: 20px;"></div>
</div>

一些 SQL 可以给你启发

select * from 
(
    select Id, FirstName, LastName, Email, ROW_NUMBER() over (order by UserName) rownum
    from [.. your stuff]
    where [... your stuff]
) seq
where seq.rownum between @skip and @count

关于javascript - 使用 ajax 的光滑网格示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15271520/

相关文章:

javascript - 返回有关其包含对象之一的值的数组键的最佳方法

php - 为什么这个 Ajax 渲染需要这么长时间?

javascript - 当 AJAX 响应来自 PHP 文件时,如何在中心显示带有消息的加载器图像并防止引导模式对话框关闭?

php - Ajax 操作 URL 不起作用 + Symfony2

android - 如何在 Android 中使图像成为 Grid View 的背景?

iphone - iOS 中带有图片的 XML Gridview

javascript - 如何使用 jquery 或 php 根据条件闪烁表行?

javascript - 如何在每个时间段检测到最大条目时更改日历覆盖

javascript - 如何检测用户是否在同一 session 中打开了多个窗口或选项卡?

android如何使gridview项目角变圆