如何将Kendo Grid dataSource更新为远程URL,但不触发ajax调用?

看看我的小提琴

不幸的是,Kendo Grid似乎没有为优秀的SEO提供原生解决方案( 见这里 )。 但我想我会尝试一下,看看我能做些什么。 这是我到目前为止:

为了使用Kendo Grid实现适当的渐进增强方法,我有3个部分:

  1. 用于SEO目的的预先存在的HTML表( 参见小提琴的html部分
  2. 来自HTML表格的相同数据,但作为JSON( 参见js小节的顶部 )。 这是Kendo将显示正确的页面和总页面(如果我只是让它单独转换HTML网格,它就不会这样做!!)。
  3. 所有后续调用都将通过ajax处理。 ( 请参阅小提琴中网格输出上方的“渐进增强我”按钮

为了保持一切干净整洁,我有一个服务器端脚本,可以生成HTML表和JSON。 我只是将我的服务器端变量插入到我的视图(页面)中,一切都很好。

但是我有一个问题。 我需要将dataSource更新为远程URL,如按下“Progressive Enhance Me!”时所示。 按钮。 按下按钮时,会进行不必要的ajax调用。 在实际应用程序中,这种不必要的初始ajax调用可能代价高昂,而冗余的服务器端数据库查询可能会降低页面速度。 有没有办法在没有进行ajax调用的情况下更新dataSource?

(我也对有关使用Kendo Grid实现渐进增强的更好方法的建议持开放态度)。

myData = { // some json here...see fiddle }; $("#grid").kendoGrid({ dataSource: { data : myData, dataType: "json", pageSize:5, serverPaging: true, serverSorting: true, schema: { data: "results", total: function (data) { return data.__count; } } }, height: 250, filterable: true, sortable: true, pageable: true, columns: [ { field:"OrderID", filterable: false, width: 75 }, { field:"Freight", filterable: false, width: 75 }, { field: "OrderDate", title: "Order Date", width: 120, format: "{0:MM/dd/yyyy}" }, { field: "ShipName", title: "Ship Name", width: 260 }, { field: "ShipCity", title: "Ship City", width: 150 } ] }); // Button should NOT make an ajax call...I just want to update the dataSource $("#progress-enhance-me").click(function(){ var grid = $("#grid").data("kendoGrid"); var newDataSource = new kendo.data.DataSource({ type: "odata", transport: { read: "http://demos.telerik.com/kendo-ui/service/Northwind.svc/Orders" }, schema: { model: { fields: { OrderID: { type: "number" }, Freight: { type: "number" }, OrderDate: { type: "date" }, ShipName: { type: "string" }, ShipCity: { type: "string" } } } }, page: 1, pageSize: 5, serverPaging: true, serverFiltering: true, serverSorting: true }); grid.setDataSource(newDataSource); }); 

编辑:我尝试了另一种方法,使用requestStart调用。 在这里小提琴 。 但是我不认为这会起作用,因为我没有办法将最后一次点击(页码点击,或排序标题点击等)转移到新数据源。

由于我需要网格对SEO友好,我最终成功使用jqgrid实现渐进增强。 在这里查看我的答案: Jqgrid和渐进增强:从HTML,本地JSON成功进展到远程JSON,但是寻呼机无法正常启动?

我也可以使用它来设置它与Bootstrap 3一起工作。

更新:
我现在实际上正在使用这个的分叉版本: https : //github.com/wenzhixin/bootstrap-table
Jqgrid太笨重,并没有在手机上快速播放。