6

私は剣道初心者です。モデルバインディングに問題があります。firebug でデバッグすると、options.models is undefinedと表示されます。そのため、parameterMap の「if」条件は常に false であり、グリッドはデータを入力しません。 しかし、parameterMap の部分を削除すると、機能します。kendo dataSourceのパラメータマップ について、どなたか教えていただけると大変助かります。ありがとうございました。

ここに画像の説明を入力

    function GetDataSource() {
    var PrjKy = $("#cmbPrjNm").val();
    if (PrjKy == "") { PrjKy = 1; }

    var PrcsDetKy = 1;
    if (PrcsDetKy == "") { PrcsDetKy = 1; }

    var PrcsTypKy = $("#toDotype").val();
    if (PrcsTypKy == "") { PrcsTypKy = 1; }

    var AprPrtyKy = $("#cmbPiority").val();
    if (AprPrtyKy == "") { AprPrtyKy = 1; }

    var AprStsKy = $("#status").val();
    if (AprStsKy == "") { AprStsKy = 1; }

    var OrginAdrKy = 1;
    if (OrginAdrKy == "") { OrginAdrKy = 1; }

    var AprUsrKy = 1;
    if (AprUsrKy == "") { AprUsrKy = 1; }

    var NxtActByAdrKy = $("#cmbEmployee").val();
    if (NxtActByAdrKy == "") { NxtActByAdrKy = 1; }

    var FrmNxtActEntDt = $("#FrmNextActEnt").val();
    var ToNxtActEntDt = $("#ToNextActEnt").val();

    var FrmNxtActDt = $("#rcdDt").val();
    var ToNxtActDt = $("#toDt").val();

    var FrmInsertDt = $("#insrtDt").val();
    var ToInsertDt = $("#InsrtToDt").val();

    var dataSource = new kendo.data.DataSource({
        transport: {
            read: {
                url: '@Url.Content("~/User/GetAllToDo")',
                data: {
                    'PrjKy': PrjKy,
                    'PrcsDetKy': PrcsDetKy,
                    'PrcsTypKy': PrcsTypKy,
                    'AprPrtyKy': AprPrtyKy,
                    'AprStsKy': AprStsKy,
                    'OrginAdrKy': OrginAdrKy,
                    'AprUsrKy': AprUsrKy,
                    'NxtActByAdrKy': NxtActByAdrKy,
                    'FrmNxtActEntDt': FrmNxtActEntDt,
                    'ToNxtActEntDt': ToNxtActEntDt,
                    'FrmNxtActDt': FrmNxtActDt, //changed on 2013-8-30
                    'ToNxtActDt': ToNxtActDt, //changed on 2013-8-30
                    'FrmInsertDt': FrmInsertDt, //changed on 2013-8-30
                    'ToInsertDt': ToInsertDt//changed on 2013-8-30
                },
                dataType: "json"
            },
            update: {
                url: "~/Home/UpdateToDo",
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "POST"
            },
            create: {
                url: '@Url.Content("~/Home/UpdateToDo")',
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "POST"
            },
            destroy: {
                url: '@Url.Content("~/User/DeleteToDo")',
                contentType: 'application/json; charset=utf-8',
                dataType: "json",
                type: "POST"
            },
            parameterMap: function (options, operation) {
                if (operation !== "read" && options.models) {
                    return JSON.stringify({ models: options });
                }
            }
        },
        pageSize: 10
    , schema:
    {
        model:
        {
            id: "PrcsDetKy", //Primary key to uniquely identify the row.
            fields: //Relavent fields of the grid should be bind with following model items
                {
                ID: { editable: false, nullable: false },
                NxtActEntDt: { editable: true, nullable: false, validation: { required: true} },
                AprPrty: { editable: true, nullable: false, validation: { required: true} },
                AprUsr: { editable: true, nullable: true },
                AprSts: { editable: true, nullable: true },
                AprStsKy: { editable: true, nullable: true },
                AprPrtyKy: { editable: true, nullable: true },
                AprUsrKy: { editable: true, nullable: true },
                AprResnKy: { editable: true, nullable: true },
                PrjId: { editable: true, nullable: true },
                TaskId: { editable: true, nullable: true },
                TaskNm: { editable: true, nullable: false }, //validation: { required: true}
                PrcsDetKy: { editable: false, nullable: false },
                TaskTyp: { editable: true, nullable: false },
                PrcsTypKy: { editable: true, nullable: true },
                PrjKy: { editable: true, nullable: true },
                PrcsDetAprKy: { editable: true, nullable: true },
                PrjNm: { editable: true, nullable: false, validation: { required: true} },
                Des: { editable: true, nullable: false },
                NxtActByAdr: { editable: true, nullable: false, validation: { required: true} },
                NxtActByAdrKy: { editable: true, nullable: true },
                NxtActDt: { editable: true, nullable: true },
                Rem: { editable: true, nullable: true, type: "string" },
                OriginBy: { editable: false, nullable: true },
                Hyperlinks1: { editable: false, nullable: true },
                Hyperlinks2: { editable: false, nullable: true },
                Hyperlinks3: { editable: false, nullable: true },
                Hyperlinks4: { editable: false, nullable: true },
                OrginAdrKy: { editable: true, nullable: true },
                WrkStnKy: { editable: true, nullable: true },
                ObjKy: { editable: true, nullable: true },
                ObjCd: { editable: true, nullable: true },
                ObjNm: { editable: true, nullable: true },
                ItmKy: { editable: true, nullable: true },
                ItmCd: { editable: true, nullable: true },
                IsAct: { editable: true, nullable: true },
                IsApr: { editable: true, nullable: true },
                OrgEntDt: { editable: true, nullable: true }
            }
        }
    }
    });
    return dataSource;
}
4

2 に答える 2

3

ここで非常に明確な説明を見つけることができますparameterMap

パラメータのカスタム セットを定義するか、リモート サービスの呼び出し中に追加の操作を実行するには、parametrMap を使用する必要があります。基本的にここで、読み取り、更新、または削除する場合 (これは、スニペットの値「読み取り」の操作変数です)、「トランスポート」で定義したメソッドに次のパラメーターを追加したいと言っています。

あなたの場合、 options.models を定義していないようです。これは、データソースに変数/コレクションモデルがないことを意味します。そうである必要はありません。私には、呼び出しようとしている読み取りメソッドは実際にはパラメーターを必要としないように見えるので、paramMap から空の文字列を返すか、この構成セクションをまったく持たないようにすることができます。

注:データソースを定義した方法は少し混乱しています。たとえば、「url」を定義したときに構成「データ」を提供しないでください。URLのデータを取得しています。ローカルとリモートを参照してください。

于 2013-09-09T11:44:09.890 に答える
2

Kendo のドキュメントで定義されている ParameterMap は、リクエスト パラメータをリモート サービスに適した形式に変換する関数です。

関数ParameterMap: function (options, operation){...}の形式では、 options パラメータはトリッキーなものです。剣道書ではデータと呼んでいます。ただし、開発者は、好みに応じてオプションとして名前を変更することを選択します. ただし、パラメータ名だけなので違いはありません。

optionsパラメータの値は、トランスポート セクションが何をしているかによって異なります。読み取り操作の場合、剣道は自動的にskiptakepagepagesizeなどのフィールドを設定します。ただし、剣道グリッドでページングが true に設定されているか、ソートが true に設定されているかなどによって異なります。したがって、実際にはスマートです。これらのパラメーターを自動的に取得してサービスに渡すには十分です。

サービスでは、剣道がパラメーターに名前を付けるのとまったく同じ名前を関数に付ける必要があります。デフォルトでスキップ、テイク、ページなどのように。ただし、パラメーター名は、ドキュメントに記載されているように、 $top: data.takeのように記述することで変更できます。

私もその概念に慣れていないので、これが私が集めることができたものです。この記事で以下の情報を取得できれば、完全なセットになります。

  • 読み取りの場合のオプションの完全なリストは、ページングと並べ替えが true に設定されています。
  • 削除および更新の場合のオプションの完全なリストは何ですか。
于 2016-05-16T14:35:50.530 に答える