This is a migrated thread and some comments may be shown as answers.

CRUD Operations on local data - parameterMap not firing

0 Answers 245 Views
Data Source
This is a migrated thread and some comments may be shown as answers.
Darren
Top achievements
Rank 1
Darren asked on 27 Aug 2012, 03:58 PM
Hey guys,

I have a grid bound to a DataSource which references local data.  The data is loaded with a prior ajax call and is simply re-used in this DataSource to save on a round trip to the server.  The local data is a subset of a larger data set.

I have a need to perform CRUD operations on this local data via a grid.  Prior to sending the payload to the server, I need to map the model to a server-friendly object graph.  I assume the best way to do this is via the transport.parameterMap option.

Here's my grid & DataSource configuration:

grid.kendoGrid({
    dataSource: {
        transport: {
            read: function(options) {
                options.success(filters); // filters is the local array of data
            },
            create: function(options) {
                prime.dsCrud({ url: 'CreateFilters', crud: options });
            },
            update: function (options) {
                prime.dsCrud({ url: 'UpdateFilters', crud: options });
            },
            destroy: function(options) {
                prime.dsCrud({ url: 'DestroyFilters', crud: options });
            },
            parameterMap: function(options, operation) {
                console.log(operation); // *** never fires! ***
            }
        },
        batch: true,
        pageSize: 10,
        schema: {
            model: {
                id: 'id',
                fields: {
                    id: { editable: false, nullable: true },
                    member: { type: 'string', validation: { required: true } },
                    operator: { type: 'number', validation: { required: true } },
                    dataType: { type: 'string', validation: { required: true } },
                    value: { type: 'string', validation: { required: true } }
                }
            }
        }
    },
    sortable: true,
    pageable: true,
    filterable: false,
    editable: true,
    navigatable: true,
    toolbar: ["create", "save", "cancel"],
    columns: [
        {
            field: 'member',
            title: 'Column'
        },
        {
            field: 'operator',
            title: 'Operator'
        },
        {
            field: 'value',
            title: 'Value(s)'
        },
        {
            command: 'destroy',
            title: '',
            width: '170px'
        }
    ]
});

For completeness sake, here is my prime.dsCrud function:

prime.dsCrud = function (options) {
    $.ajax({
        url: prime.data.queryTool + options.url,
        dataType: 'jsonp',
        contentType: 'application/json',
        type: 'POST',
        data: options.crud.data,
        success: function(data, textStatus, jqXHR) {
            options.crud.success(data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            options.crud.error(jqXHR);
        },
        complete: function(jqXHR, textStatus) {
            console.log('-----------------------------------');
            console.log('response from ' + options.url + ':');
            console.log(jqXHR);
            console.log('-----------------------------------');
        }
    });
}

I realize I could probably do this in the prime.dsCrud function's "data" configuration, but I would prefer to leave this function more generic.  Can anyone explain to me why my transport.parameterMap isn't firing?

Thanks!

No answers yet. Maybe you can help?

Tags
Data Source
Asked by
Darren
Top achievements
Rank 1
Share this question
or