2

現在、Spring MVC を Kendo UI jQuery ライブラリ (最新バージョン) と組み合わせて使用​​するプロジェクトに取り組んでいます。私が抱えている問題は、剣道グリッドのデータソースをインラインでローカル (剣道データソース) とリモートで更新することです。datasource オブジェクトの synch メソッドと set メソッドを使用しましたが、どちらも機能しませんでした。

私のjQueryコード:

/*global $:false */

$(document).ready(function () {
    "use strict";
    var request;
   
    $("#tabstrip").kendoTabStrip();

    

    var applicationDataSource = new kendo.data.DataSource({
        transport: {
            read: {
                url: "/appinfo/findApplications",
                dataType: "json"
            },
            create: {
                url: "/appinfo/submit",
                dataType: "json",
                type: "POST"
            },
            update: {
                url: "/appinfo/updateApplication",
                dataType: "json",
                type: "POST"
            },
            destroy: {
                url: "/appinfo/deleteApplication",
                dataType: "json"
            },
            schema: {
                model: {
                    id: "applicationId",
                    fields: {
                        applicationId: {type: "number"},
                        applicationName: {type: "string"},
                        url: {type: "string"},
                        serverName: {type: "string"},
                        environmentName: {type: "string"},
                        ipAddress: {type: "string"},
                        genericUserName: {type: "string"},
                        genericPassword: {type: "string"}
                    }
                }
            },
            parameterMap: function (options, operation) {
                if (operation !== "read" && options.models) {
                    return {models: kendo.stringify(options.models)};
                }

                if (operation == "destroy" && options.models) {
                    console.log("Delete worked");
                    return { models: kendo.stringify(data.models) };
                }
            }
        },
        batch: true,
        pageSize: 10
    });




    var applicationGrid = $("#applicationsGrid").kendoGrid({
        dataSource: applicationDataSource,
        pageable: true,
        height: 600,
        scrollable: true,
        sortable: true,
        filterable: true,
        toolbar: [
            {name: "create", text: "Add New Application"}
        ],
        columnMenu: true,
        editable: {
            update: true,
            destroy: true,
            create: true,
            mode: "inline",
            confirmation: "Are you sure you want to delete this record?"
        },
        columns: [
            {field: "applicationName", title: "Application Name"},
            {field: "url", title: "URL"},
            {field: "serverName", title: "Server", editor: serverDropDownEditor, width: "300px"},
            {field: "environmentName", title: "Environment", editor: environmentDropDownEditor, width: "300px"},
            {field: "ipAddress", title: "Database", editor: databaseIpAddressDropDownEditor, width: "300px"},
            {field: "genericUserName", title: "Default Username"},
            {field: "genericPassword", title: "Default Password"},
            {title: "Modify", command: ["edit" , "destroy"]}
        ],
        edit: function (e) {           
            var dataItem = applicationDataSource.at(e.currentTarget);
            console.log("DataSource Count: " + applicationDataSource.total());
        },
        save: function (e) {
            var dataItem = applicationDataSource.at(e.currentTarget);          
            console.log("DataSource Count: " + applicationDataSource.total());
            console.log("The  model on save: " + e.model.applicationName);
            applicationDataSource.sync();
        },
        create: function (e) {
            console.log("Create this: " + e.values);
            applicationDataSource.insert(e.model);
            applicationDataSource.sync();
        },
        delete: function (e) {
            console.log("Delete this: " + e.model);
            applicationDataSource.remove(e.model);
        }
    });


    function serverDropDownEditor(container, options) {
        $('<input required data-text-field="serverName" data-value-field="serverId" data-bind="value:' + options.field + '"/>')
            .appendTo(container)
            .kendoDropDownList({
                autoBind: false,
                optionLabel: " - Select - ",
                dataTextField: "serverName",
                dataValueField: "serverId",
                dataSource: {
                    transport: {
                        read: {
                            url: "/appinfo/findServers",
                            dataType: "json"
                        }
                    }
                }
            });
    }

    function environmentDropDownEditor(container, options) {
        $('<input required data-text-field="environmentName" data-value-field="environmentId" data-bind="value:' + options.field + '"/>')
            .appendTo(container)
            .kendoDropDownList({
                autoBind: false,
                optionLabel: " - Select - ",
                dataTextField: "environmentName",
                dataValueField: "environmentId",
                dataSource: {
                    transport: {
                        read: {
                            url: "/appinfo/findEnvironments",
                            dataType: "json"
                        }
                    }
                }
            });
    }

    function databaseIpAddressDropDownEditor(container, options) {
        $('<input required data-text-field="ipAddress" data-value-field="databaseInfoId" data-bind="value:' + options.field + '"/>')
            .appendTo(container)
            .kendoDropDownList({
                autoBind: false,
                optionLabel: " - Select - ",
                dataTextField: "ipAddress",
                dataValueField: "databaseInfoId",
                dataSource: {
                    transport: {
                        read: {
                            url: "/appinfo/findDatabases",
                            dataType: "json"
                        }
                    }
                }
            });
    }
});

ところで.... Kendo-UI Web の最新バージョンを使用しています。

4

4 に答える 4

3

実際の問題が何であるかは実際にはわかりませんが、サーバーに対してネットワーク要求を行っていないと思います。これは、DataSource でモードが有効になっているためだと思いますbatch。そのため、グリッドが指示するか、手動で呼び出さない限り、サーバーに変更が自動的に送信されません。.sync()

およびイベント ハンドラを呼び出そうとして.sync()いますが、その必要はありません。[保存] ボタンをクリックすると、グリッドはデータソースを同期します。ただし、保存ボタンはありません。通常、グリッドのツールバーに追加します。savecreate

toolbar: ["create", "save", "cancel"],

次に、グリッド ツールバーに 3 つのボタンがすべて表示されます。すべてのデータ行を編集して [保存] をクリックすると、グリッドが.sync()DataSource を呼び出します。これにより、イベント コールバックもトリガーされsaveますが、コールバックはデータをコンソールに記録する以外に何もしていないように見えます。.sync()イベント コールバックを呼び出す必要はありません。

Grid : Batch Editingデモは、例として次のように設定されています。


行を編集、削除、または作成した瞬間にデータがサーバーに送信されることを期待している場合は、代わりに を設定batchする必要がありますfalse。その後、DataSource はそれ以上 (バッチ) の変更を待機せず、すぐにデータを送信します。

于 2014-06-10T11:54:44.293 に答える
1

DataSource モードに関する私の他の回答に加えて、batchエディターとして使用する 3 つのドロップダウン リストを初期化していることもわかります。Kendo Grid には、これを行うための組み込み機能があり、これはForeignKey Columnsと呼ばれます。彼らのデモでは、ドロップダウン エディターで使用する FK データの同期ロードのみを示していますが、複数の非同期ロードの例をここに示します。

剣道楽器店のドキュメント

剣道楽器ストア ソース (GitHub)

于 2014-06-10T12:07:11.243 に答える
1
var dataSource = new kendo.data.DataSource({
  //define datasource parameters as per your requirement
});
var grid = jQuery("#grid").kendoGrid({
  dataSource: dataSource,
});

jQuery('#changeevent').change(function()
{
  dataSource.read({
    parametername:jQuery("#valueoffeild").val()
  });

  var grid = jQuery("#grid").data("kendoGrid")
  grid.refresh();
});

上記のコードは、追加のパラメーターを URL に渡します。

于 2013-08-30T14:52:54.343 に答える
0

私は kendo-ui 2014.3.1119 を使用しています。これは kendo-ui で ngResource Restful API を利用するために行ったことです。

dataSource: {
    transport: {
        read: function (options) {
            RestService.query(function (result) {
                options.success(result);
            });
        },
        update: function (options) {
            RestService.update(options.data, function (result) {
                options.success(result);
            });
        },
        create: function (options) {
            RestService.save(options.data, function (result) {
                options.success(result);
            });
        }
    }
于 2015-01-07T23:19:56.013 に答える