0

データソースがローカルにロードされたグリッドがあります (トランスポートを使用していません)。ユーザーが「編集」ボタンをクリックしたときに行にチェックボックスを追加するカスタム エディターを作成できました。ユーザーがフィールドを変更する権限があるかどうかを確認するためにフィールドごとのチェックを行う必要があるため、デフォルトのエディターを使用できません。

「編集」ボタンをクリックすると、期待どおりの結果が得られ、必要な場所にチェックボックスが表示されます。ただし、データを変更して「更新」ボタンをクリックすると、行が削除されます。または、「編集」モードでユーザーが別の行の別の「編集」ボタンをクリックすると、元の行が削除されるか、null データに関するコンソール エラーが発生します。

更新イベントも発生しないように見えるため、データ ソースの更新を手動で処理できます。

dataSource = new kendo.data.DataSource({
  data: result,                         
  change: function(e){
  console.log('a change happened');
  console.log(e);                               
  },
  schema: {
    model: {
      id: "uid",
      fields: {
        lastName: {editable:false},
        firstName: {editable:false},
        email: {editable:false},
        accountNum: {editable:false},
        email: {editable:false},
        status: {editable:true},
        RQ:{editable:true, type:"boolean"},
        RR:{editable:true, type:"boolean"},
        ER:{editable:true, type:"boolean"},     
      }
    }
  },
  batch: true,
  pageSize: 50
});


$("#grid").kendoGrid({
    dataSource: dataSource, 
    editable: "inline",
    pageable: {
        refresh: false,
        pageSize: 50,
        pageSizes: [
            50,
            100,
            200
        ]
    },
    filterable: {
        extra: false,
        operators: {
            string: {
                contains: "Contains",
                startswith: "Starts with"
            },          
        }
    },
    reorderable: true,
    resizable: true,
    columns: columnsettings,
    edit: function(e){
        //$('#grid').data('kendoGrid').dataSource.read();
        console.log('an edit happened');
        console.log(e);
        //e.preventDefault();
    },
    cancel: function(e){
        //$('#grid').data('kendoGrid').dataSource.read();
        //$('#grid').data('kendoGrid').dataSource.sync();
        console.log('cancel happened');
        console.log(e);
        //e.preventDefault();
        $('#grid').data('kendoGrid').dataSource.read();
    },
    update: function(e){
        console.log('an update happened');
        console.log(e);
    },
    change: function(e){
        console.log('a change happened not datasource one');
        console.log(e);
    },
    saveChanges: function(e){
        console.log('a save is about to occurr');
        console.log(e);
    },
    // get grid state to save to DB
    dataBound: function(e){
        var grid = this;
        var dataSource = this.dataSource;
        var state = kendo.stringify({
            page: dataSource.page(),
            pageSize: dataSource.pageSize(),
            sort: dataSource.sort(),
            group: dataSource.group(),
            filter: dataSource.filter()
        });
    }
});





function customInlineEditor(container, options){
        var currentField = options.field;
        var inputField;
        if(options.model[currentField] === true){
            inputField = $('<input type="checkbox" data-value-field="'+currentField+'" name="'+currentField+'" checked>');
        }else if(options.model[currentField] === false){
            inputField = $('<input type="checkbox" name="'+currentField+'">');
        }else{
            //inputField = "Locked";
        }
        container.append(inputField);
    }
4

2 に答える 2

3

トランスポートが定義されていない Kendo Grid は、データを編集するのではなく、単に「表示」するように設計されています。「保存」、「更新」、「編集」などのイベントにイベント ハンドラーを使用する代わりにできることは、トランスポート操作を関数として宣言することです。

var data = [
  { Id: 1, Name: "Decision 1", Position: 1 },
  { Id: 2, Name: "Decision 2", Position: 2 },
  { Id: 3, Name: "Decision 3", Position: 3 }
];

var dataSource = new kendo.data.DataSource({
  //data: data,
  transport: {
    read: function(e) {                                
      e.success(data);
    },
    update: function(e) {                                
      e.success();
    }, 
    create: function(e) {
      var item = e.data;
      item.Id = data.length + 1;
      e.success(item);
    }
  },

これは正常に動作するはずの例です

于 2013-10-29T16:52:41.683 に答える
1

これはゲームの後半ですが、データソース全体を見ることは他の人に利益をもたらすと思いました.

剣道関連のドキュメントのいくつかの問題は、いくつかの例が十分に進んでおらず、実際の実装を反映していないことです。

        return new kendo.data.DataSource({
            type: "odata",
            transport: {
                read:
                    function (options) {
                        var odataParams = kendo.data.transports["odata"].parameterMap(options.data, "read");

                        dataFactory.getList(odataParams)
                            .success(function (result) {
                                options.success(result);
                            })
                            .error(function (error) {
                                console.log("data error");
                            });

                        //$http({
                        //    url: crudServiceBaseUrl,
                        //    method: 'GET',
                        //    params: odataParams
                        //})
                        //.success(function (result) {
                        //    options.success(result);
                        //});
                    },
                //{
                //    url: crudServiceBaseUrl,
                //    dataType: "json"
                //},



                // {function (options) {
                //    //var odataParams = kendo.data.transports["odata"].parameterMap(options.data, "read");   // "{"take":"10","skip":"0","page":"1","pageSize":"10"}"
                //    (new abstractFactory2().query({ odataUrl: crudServiceBaseUrl })).$getAll()
                //        .then(function (data) {
                //            return options.success(data);
                //        });


                //var odataParams = kendo.data.transports["odata"].parameterMap(options.data, "read");   // "{"take":"10","skip":"0","page":"1","pageSize":"10"}"
                //contentTypeFactory.getList()
                //    .success(function (data) {
                //        return options.success(data);
                //    })
                //    .error(function (error) {
                //        console.log(error);
                //    });
                //},
                update:
                    function (options) {
                        //var odataParams = kendo.data.transports["odata"].parameterMap(options.data, "update");
                        var data = options.data;
                        dataFactory.update(data.ContentTypeId, data)
                            .success(function (result) {
                                // call standard error message function
                                customFunctions.showConfirmation();
                                options.success(result);
                            })
                            .error(function (error) {
                                customFunctions.showError("Update Failed"); // use default error message
                                console.log("data error");
                            });

                        //{ // PUT
                        //url: function (data) {
                        //    console.log(data);
                        //    dataType: "json"
                        //    return crudServiceBaseUrl + "(" + data.ContentTypeId + ")";
                        //},
                        //error: function (e) {
                        //    console.log("error: " + e);
                        //}
                    },
                create:
                    function (options) {
                        var data = options.data;
                        data.ContentTypeId = "0";           // required for valid field data
                        dataFactory.insert(data)
                            .success(function (result) {
                                options.success(result);
                            })
                            .error(function (error) {
                                customFunctions.showError("Create Failed"); // use default error message
                            });

                        //{ // POST
                        //data: function (data) {
                        //    // reformat the data to match the DTO
                        //    data.ContentTypeId = "0";
                        //    data.NumberOfContentTypes = "0";
                        //    //data.msrepl_tran_version = "00000000-0000-0000-0000-000000000000";
                        //    return data;
                        //},
                        //url: function (data) {
                        //    console.log(data);
                        //    return crudServiceBaseUrl;
                        //},
                        //error: function (e) {
                        //    console.log("create error: " + e);
                        //},
                        //dataType: "json",
                    },
                destroy:
                    function (options) {
                        var data = options.data;
                        dataFactory.remove(data.ContentTypeId)
                            .success(function (result) {
                                options.success(result);
                            })
                            .error(function (error) {
                                console.log("data error");
                            });

                        //{
                        //url: function (data) {
                        //    dataType: "json";
                        //    return crudServiceBaseUrl + "(" + data.ContentTypeId + ")";
                        //},
                        //success: function (e) {
                        //    console.log("success");
                        //},
                        //error: function (e) {
                        //    console.log(e);
                        //}
                    },
                parameterMap: function (options, type) {
                    // this is optional - if we need to remove any parameters (due to partial OData support in WebAPI
                    if (operation !== "read" && options.models) {
                        return JSON.stringify({ models: options });
                    }
                    //var parameterMap = kendo.data.transports.odata.parameterMap(options);

                    //delete parameterMap.$inlinecount;               // remove inlinecount parameter
                    //delete parameterMap.$format;                    // remove format parameter

                    //return parameterMap;
                },

            },
            batch: false,
            pageSize: 10,
            serverPaging: true,
            change: function (e) {
                console.log("change: " + e.action);
                // do something with e
            },
            schema: {
                data: function (data) {
                    //console.log(data)
                    return data.value;
                },
                total: function (data) {
                    console.log("count: " + data["odata.count"]);
                    return data["odata.count"];
                },
                model: {
                    id: "ContentTypeId",
                    fields: {
                        ContentTypeId: { editable: false, nullable: true },
                        //UserId: {editable: false, nullable: false },
                        Description: { type: "string", validation: { required: true } },
                        //msrepl_tran_version: { type: "string", validation: { required: true } }
                    }
                }
            },
            error: function (e) {
                //var response = JSON.parse(e.responseText);
                var response = e.status;
                console.log(response);
            }
        })  // dataSource

これは完全な KendoUI OData データソースであり、最初は KendoUI のデフォルトの方法を使用していました (さまざまなトランスポート セクションのセクションをコメント アウトし、参照用に残しています)。これが異なるのは、Kendo オプションを公開して に保存し、通信を処理するAngularJS ファクトリ プロバイダーodataParamsに渡すことです。

セクションをメモし、parameterMap:そこにブレークポイントを設定して、参照用に何が通過するかを確認します。

いくつかの追加console.log()のデバッグがそこに入れられています。

これが有益であることを願っています。

于 2014-03-18T11:04:31.467 に答える