2011-07-12 42 views
16

我想让AJAX与SlickGrid一起工作。 The example given is hardcoded for DiggSlickGrid AJAX数据

另外,我不认为缓存在这个例子中工作。由于Digg限速,很难真正了解它的工作原理。我如何设置SlickGrid从分页中获取数据库中的数据。

+0

请参阅我在这个[文章]代码(slick.remote.js)(http://stackoverflow.com/questions/7149639/slikgrid-virtual例如滚动 - 巨大数据集)。 @vulcan - 感谢您帮助我开始使用ajax示例的步骤。我还没有实现过滤。 – StudentForever

回答

0
  1. 类添加到要使用Ajax
  2. Add an onRenderCompleted event
  3. 绑定使用类的选择和添加的东西像其他DOM elementent onRenderCompleted函数内部
21

我刚去的列通过这个,所以这里是我做的:

  1. 复制实例的内容e6-ajax-loading.html(在SlickGrid下载中)放到你的html文件中 - 让我们称之为mygrid.html(或者放到你的代码中生成html。在我的情况下,我使用CodeIgniter,所以我复制到mygrid_view.php)。

  2. 将slick.remotemodel.js复制到yourRemoteModel.js。

  3. 在“mygrid.html”中,确保您具有所有javascript文件的正确路径。将slick.remotemodel.js更改为yourRemoteModel.js。消除任何重复的脚本 - 例如,如果您已经在使用最新版本的jQuery,则取消引入jquery-1.4.3.min.js的“mygrid.html”中的行。

  4. 在“mygrid.html”中,更改'columns'变量的初始值以匹配要从数据库中显示的数据。注意字段属性。这必须与将从服务器返回的JSON响应中的属性名称一致。 (*参见最后关于这个的注释)。

  5. 在yourRemoteModel.js中,将url变量更改为指向您的服务器,并传递适当的参数。在我来说,我通过页面和行paramters到我的服务器这样的: “?页=”

    VAR URL = myServerUrl + + fromPage + “&行=” +(((toPage - fromPage)* PAGESIZE)+ PAGESIZE);

  6. 在yourRemoteModel.js中,将jsonp调用更改为ajax - 除非需要跨域执行此操作,否则您可以将其更改为如下所示:

     req = $.ajax({ 
          url: url, 
          dataType: 'json', 
          success: onSuccess, 
          error: function(){ 
           onError(fromPage, toPage) 
          } 
          }); 
    
  7. 在yourRemoteModel.js中,您现在必须自定义onSuccess()函数。按照示例中的模式,设置被整数偏移到数据记录中,设置data.length为总记录数,然后设置数据数组。这段代码依赖于来自服务器的JSON响应。

  8. 现在将代码写入服务器以生成JSON响应。从步骤7可以看到,这需要在数据中包含记录(或页面)偏移量,并指出返回的记录数量以及记录本身的数组。请记住,每条记录的每个字段都必须具有与列定义中的“字段”设置相匹配的属性名称(从上面的步骤4开始)。看看从Digg的反应为例:

http://services.digg.com/search/stories?query=apple&offset=0&appkey=http://slickgrid.googlecode.com&type=javascript&callback=cb

而且应该这样做!

*注意:在我的情况下,我不想使用带宽返回JSON响应中每个记录重复的所有属性名称,所以我返回一个记录值数组。然后,我将列描述(上面的第4步)中的field属性设置为该数组中的整数偏移量。所以在列描述中,而不是字段:'someFieldName',我使用字段:3,然后在我的远程模型中,onSuccess()函数我设置数据[来自+ i] = resp.record [i] .data(其中.data是记录中字段值的JSON响应中的一个数组)。到目前为止,这似乎对我很好(但如果出现错误,可能会更难调试)

+0

+1为您的详细解答。我可以问在第7步中使用了哪个函数来更新总记录数?我尝试过'onRowCountChanged.notify({previous:resp.hits,current:resp.hits},null);'其中'resp.hits'是我的总行数,但它不起作用。 –

0

对于任何其他人希望做这个检查出这个slickgrid的叉子。 https://github.com/harbulot/SlickGrid

它增加了一个漂亮的小Python的服务器提供AJAX后端

git clone [email protected]:harbulot/SlickGrid.git 
cd SlickGrid/ 
python localajaxserver.py 

然后去http://127.0.0.1:8000/examples/example6b-ajax-localserver.html与您的浏览器。

看拉入请求,看看有什么改变https://github.com/harbulot/SlickGrid/compare/mleibman:master...url_builder