Quantcast
Channel: Recent Discussions — DataTables forums
Viewing all articles
Browse latest Browse all 82268

Cannot read property 'multiEditable' of undefined

$
0
0

I seem to keep getting this error and not sure why or how to fix it.

Console:

datatables.js:50065 Uncaught TypeError: Cannot read property 'multiEditable' of undefined
at Editor._multiInfo (datatables.js:50065)
at Editor.Field._multiValueCheck (datatables.js:45671)
at Editor.Field.multiSet (datatables.js:45473)
at Object.<anonymous> (datatables.js:49625)
at Function.each (datatables.js:383)
at Editor.Field.<anonymous> (datatables.js:49621)
at Function.each (datatables.js:383)
at Editor._edit (datatables.js:49617)
at Editor.edit (datatables.js:47565)
at _Api.action (datatables.js:52070)

No message comes up in the UI.

To duplicate, click on the new button, then I click on the edit button and the error will come up in the console. The modal window will not open. Editing multiple items - one after another - does not trigger the error. It only comes up when you switch to create a record (which works), but then the edit function will stop working.

I have tried to mark several fields as "multiEditable: false" but that doesn't seem to do anything. In the viewer I also have select restricted to single:

            "select": {
                "style": "single" // change to multiple
            },

When I look at the editor code, it points me to the following:

/**
 * Update the multi-value information display to not show redundant information
 *
 * @private
 */
Editor.prototype._multiInfo = function ()
{
    var fields = this.s.fields;
    var include = this.s.includeFields;
    var show = true;
    var state;

    if ( ! include ) {
        return;
    }

    for ( var i=0, ien=include.length ; i<ien ; i++ ) {
        var field = fields[ include[i] ];
        var multiEditable = field.multiEditable();

        if ( field.isMultiValue() && multiEditable && show ) {
            // Multi-row editable. Only show first message
            state = true;
            show = false;
        }
        else if ( field.isMultiValue() && ! multiEditable ) {
            // Not multi-row editable. Always show message
            state = true;
        }
        else {
            state = false;
        }

        fields[ include[i] ].multiInfoShown( state );
    }
};

Not sure why it goes to that function though...

Here is where the call starts:

var _buttons = DataTable.ext.buttons;


$.extend( _buttons, {
    create: {
        text: function ( dt, node, config ) {
            return dt.i18n( 'buttons.create', config.editor.i18n.create.button );
        },
        className: 'buttons-create',
        editor: null,
        formButtons: {
            label: function ( editor ) {
                return editor.i18n.create.submit;
            },
            fn: function (e) {
                this.submit();
            }
        },
        formMessage: null,
        formTitle: null,
        action: function( e, dt, node, config ) {
            var editor = config.editor;
            var buttons = config.formButtons;

            editor.create( {
                buttons: config.formButtons,
                message: config.formMessage,
                title:   config.formTitle || editor.i18n.create.title
            } );
        }
    },

    edit: {
        extend: 'selected',
        text: function ( dt, node, config ) {
            return dt.i18n( 'buttons.edit', config.editor.i18n.edit.button );
        },
        className: 'buttons-edit',
        editor: null,
        formButtons: {
            label: function ( editor ) {
                return editor.i18n.edit.submit;
            },
            fn: function (e) {
                this.submit();
            }
        },
        formMessage: null,
        formTitle: null,
        action: function( e, dt, node, config ) {
            var editor = config.editor;
            var rows = dt.rows( { selected: true } ).indexes();
            var columns = dt.columns( { selected: true } ).indexes();
            var cells = dt.cells( { selected: true } ).indexes();

            var items = columns.length || cells.length ?
                {
                    rows: rows,
                    columns: columns,
                    cells: cells
                } :
                rows;

            editor.edit( items, {
                message: config.formMessage,
                buttons: config.formButtons,
                title:   config.formTitle || editor.i18n.edit.title
            } );
        }
    },

My primary key is set to idSrc: "ItemID", which is flagged as "multiEditable: false"

In my onInitCreate function I have the following code:

            datatables_editor_detail_init.on('onInitCreate', function () {
                setTimeout(function () {

                    datatables_editor_detail_init.set("WorkDate", currentWorkingDate);

                    // Remove the ItemID field from the data on create
                    datatables_editor_detail_init.clear("ItemID");

                }, 100);
            });

and my onInitEdit:

            datatables_editor_detail_init.on('onInitEdit', function () {
                setTimeout(function () {

                    datatables_editor_detail_init.set("WorkDate", currentWorkingDate);

                    // Always show Item ID on edit
                    datatables_editor_detail_init.show("ItemID");

                }, 1);
            });

On create, the ItemID is generated automatically by the DB. Passing a null value for that field to the server will generate an error (I only have the client side editor). This is an example of the format accepted:

{
  "UserID": "username",
  "WorkDate": "2017-05-10",
  "Department": "OSP",
  "Project": "Admin",
  "Hours": "2",
  "Comments": "test"
}

and the edit will be the same, except for the "ItemID"

{
  "ItemID": 50371,
  "UserID": "username",
  "WorkDate": "2017-05-10",
  "Department": "OSP",
  "Project": "Admin",
  "Hours": "2",
  "Comments": "test - edit test"
}

After clicking the Edit button (after the New button), it just stops.
Any ideas on how to prevent the multi function from coming up?


Viewing all articles
Browse latest Browse all 82268

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>