KendoUI DataSourceの並べ替えパラメーターをプログラムで設定してからデータを読み取り、2番目のサーバーでの読み取りを回避することは可能ですか?スコープは、特定のユーザーインタラクションでデフォルトのソートを設定することです。どうやって?
答えが要点に達していないため(または、物事がどのように機能するのか理解していないため)、これが私がやろうとしている例です。
最初のソートでKendo DataSourceを定義します。
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
});
次に、DataSourceの「読み取り」を呼び出し、グリッドにデータの最初のページを入力するボタンがあります。
$("#btn").bind("click", function(e) {
datasource.page(1);
});
このように、ボタンをクリックすると、ユーザーは「field_1」と「field_2」で並べられたデータを取得し、グリッドは列ヘッダーにこの並べ替えを表示します。次に、ユーザーは、列ヘッダーをクリックすることにより、任意の方法でデータを並べ替えることができます。
私がやりたいことは、DataSource宣言で定義されているように、デフォルトのソートを最初のソートにリセットし、列ヘッダーに再度表示し、新しいDataSourceを再度作成しないことです。
何かのようなもの:
$("#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);
はい。 sort 設定で可能です。
ここにあなたが正確に何を求めているのかについてのjsfiddleがあります: http://jsfiddle.net/MechStar/c2S5d/
簡単に言えば、最初にdataSourceをnullに設定し、ユーザーから必要な入力を受け取ったときにdataSourceを挿入する必要があります。
myKendoGrid.data( "kendoGrid")。setDataSource(getKendoDataSource( "ShipName"、 "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"));
});
最初にデータを読み取る前にソートを設定したいですか? UIコントロールでautobind:falseが設定されていることを確認してから、データソースで並べ替えプロパティを設定し、並べ替えられたデータを取得する準備ができたらdatasource.read()を呼び出します。
私はあなたが何を達成しようとしているのか知っています。ユーザーの並べ替えとフィルタリング(私の場合はクライアント側)を保存しており、他の理由でグリッド関数getOptions/setOptionsを使用できないため、同じことをしなければなりませんでした。 autobind:falseを設定しても、autobindの定義が表示されている場合、これは期待どおりに機能しません。
http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-autoBind
falseに設定されている場合、ウィジェットは初期化中にデータソースにバインドしません。この場合、データソースの変更イベントが発生すると、データバインディングが発生します。デフォルトでは、ウィジェットは構成で指定されたデータソースにバインドします。
dataSource.sort()を実行すると、これによってchangeイベントが発生し、次にreadがdataSourceで暗黙的に実行されます(そのため、 2番目のサーバーの読み取りがあります)。
したがって、必要なことは、必要な並べ替えオプションを使用して新しいdataSourceを作成し、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();
この助けを願っています。よろしく!