是否可以读取数据,避免第二服务器读取之前编程设置KendoUI数据源的排序参数? 范围设置了某个用户交互的默认排序。 怎么样?
这里是什么,我试图做一个例子,因为答案是没有得到的点(或也许我不理解的事情是如何工作的)。
我定义了一个数据源剑道与初始排序:
var datasource = new kendo.data.DataSource({
parameterMap: function (inputParams, operation) {
return JSON.stringify(inputParams)
},
// default sort
sort: [
{field: "field_1", dir: "asc"},
{field: "field_2", dir: "asc"}
]
});
这个数据源绑定到剑道格:
var grid = $("element").kendoGrid({
dataSource: datasource
});
然后,我有一个按钮,调用的数据源“读”,并用数据填充的第一页格:
$("#btn").bind("click", function(e) {
datasource.page(1);
});
通过这种方式,点击按钮后,用户获得由“field_1”和“field_2”有序的数据,而网格显示这类的列标题。 然后,用户可以以任何方式重新排序数据,通过点击列标题。
我想这样做的是默认排序恢复到最初的一个,作为数据源宣言列标题再次定义,显示它,并没有重新创建一个新的数据源。
就像是:
$("#btn").bind("click", function(e) {
datasource.sort = [
{field: "field_1", dir: "asc"},
{field: "field_2", dir: "asc"}
];
datasource.page(1);
});
提供的解决方案似乎并没有到达点(和我还是不明白,为什么我失去的信誉分,这似乎是不那么平凡,应该由框架中提出一个合理的问题)。
请告诉我,我错了(我不担心失去信誉 - 我想才明白如何解决问题)。
var kendoGrid = $("#grid").data('kendoGrid');
var dsSort = [];
dsSort.push({ field: "fieldName1", dir: "asc" });
dsSort.push({ field: "fieldName2", dir: "desc" });
kendoGrid.dataSource.sort(dsSort);
这里是你问到底是什么一个的jsfiddle: http://jsfiddle.net/MechStar/c2S5d/
概括地说,虽然,你需要设置数据源最初空,然后注入数据源时,你从使用者所要输入:
。myKendoGrid.data( “kendoGrid”)的setDataSource(getKendoDataSource( “货主名称”, “ASC”));
var getKendoDataSource = function (sidx, sord) {
return new kendo.data.DataSource({
type: "odata",
transport: {
read: "http://demos.kendoui.com/service/Northwind.svc/Orders"
},
pageSize: 10,
serverPaging: true,
serverSorting: true,
sort: {
field: sidx ? sidx : "",
dir: sord ? sord : ""
}
});
};
var myKendoGrid = $("#grid").kendoGrid({
columns: [
{ field: "OrderID" },
{ field: "ShipName" },
{ field: "ShipCity" }
],
dataSource: null,
pageable: {
pageSizes: [10, 20, 50, 100, 200]
},
resizable: true,
scrollable: false,
sortable: {
allowUnsort: false
}
});
$("#link").click(function () {
myKendoGrid.data("kendoGrid")
.setDataSource(getKendoDataSource("ShipName", "asc"));
});
所以,你要设置的排序它读取数据的第一次过吗? 只要确保你已经autobind:假你的UI控件,然后设置数据源的排序属性,然后调用datasource.read()当你准备好了排序的数据。
我知道你想达到什么目的。 我不得不因为我们节省了用户的排序和过滤(在我的情况下,客户端)做相同的,我们不能用网格功能getOptions / setOptions其他原因。 即使您设置autobind:假的 ,这是行不通的,你期望的那样,如果你看到autobind的定义:
http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-autoBind
如果设置为false初始化过程中部件将不绑定到数据源。 在这种情况下的数据绑定当数据源的变化事件被触发将发生。 默认情况下,小部件将结合在配置中指定的数据源。
当你做一个dataSource.sort(),这将激发一个更改事件,那么, 读的数据源中的隐式进行(这就是为什么你有第二个服务器读取)。
所以,你所要做的就是创建所需的排序选项一个新的数据源,然后调用dataSource.read()明确。
例如(您可以延长你的默认选项为不重复配置):
var options = $.extend({}, dataSourceOptions);
options.sort = [
{field: "field_1", dir: "asc"},
{field: "field_2", dir: "asc"}
];
var dataSource = new kendo.data.DataSource(options);
grid.setDataSource(dataSource);
grid.dataSource.read();
希望这有助于。 问候!