or
<div id="grid" style="margin-bottom: 20px"></div><!-- Data sources for supporter and supportee AutoComplete. --><script type="text/javascript"> var supporterDataSource = new kendo.data.DataSource({ transport: { read: { url: "<%= supporters_admin_customer_support_clients_url + '.json' %>", dataType: 'json', error: function (xhr) { var errors = $.parseJSON(xhr.responseText).errors; popupNotification.show(errors); } }, schema: { user_id: { type: 'number' }, full_name: { type: 'string' } } } }); var supporteeDataSource = new kendo.data.DataSource({ transport: { read: { url: "<%= supportees_admin_customer_support_clients_url + '.json' %>", dataType: 'json', error: function (xhr) { var errors = $.parseJSON(xhr.responseText).errors; popupNotification.show(errors); } }, schema: { user_id: { type: 'number' }, full_name: { type: 'string' } } } });</script><!-- Tooltip error template for validation --><script id="tooltip-template" type="text/x-kendo-template"> <span class="k-widget k-tooltip k-tooltip-validation k-invalid-msg"> <span class="k-icon k-warning"></span> #=message# </span></script><!-- Popup editor template for customer support client grid --><script id="popup_editor" type="text/x-kendo-template"> <div id="popServerErrorSummaryPlaceholder" style="display:none"></div> <div class="k-edit-label" style="padding-right: 10px"> <label for="Customer Support Rep">Customer Support Rep</label> </div> <input name="Customer Support Rep" data-bind="value:supporter_name" data-value-field="user_id" data-text-field="full_name" data-source="supporterDataSource" data-role="autocomplete" required> <input type="hidden" name="SupporterID" data-bind="value:supporter_id"> <div class="clear"></div> <div class="k-edit-label" style="padding-right: 10px"> <label for="Researcher">Researcher</label> </div> <input name="Researcher" data-bind="value:supportee_name" data-value-field="user_id" data-text-field="full_name" data-source="supporteeDataSource" data-role="autocomplete" required> <input type="hidden" name="SupporteeID" data-bind="value:supportee_id"></script><!-- Customer support client grid --><% content_for :javascript do %> var crudServiceBaseUrl = "<%= admin_customer_support_clients_url %>", dataSource = new kendo.data.DataSource({ transport: { read: { url: crudServiceBaseUrl + '.json', dataType: 'json', error: function (xhr) { var errors = $.parseJSON(xhr.responseText).errors; popupNotification.show(errors); } }, create: { url: crudServiceBaseUrl + '.json', type: "POST", dataType: 'json', change: function(data) { popupNotification.show('Customer support client created successfully'); }, error: function (xhr) { var errors = $.parseJSON(xhr.responseText).errors; popupNotification.show(errors); } }, update: { url: function (data) { return crudServiceBaseUrl + '/' + data.id + '.json'; }, type: 'PATCH', dataType: 'json', change: function (data) { popupNotification.show('Customer support client updated successfully'); }, error: function (xhr) { var errors = $.parseJSON(xhr.responseText).errors; popupNotification.show(errors); } }, destroy: { url: function (data) { return crudServiceBaseUrl + '/' + data.id + '.json'; }, type: 'DELETE', dataType: 'json', change: function (data) { popupNotification.show('Customer support client deleted successfully'); }, error: function (xhr) { var errors = $.parseJSON(xhr.responseText).errors; popupNotification.show(errors); } }, parameterMap: function(options, operation) { if (operation !== 'read') { return {customer_support_client: kendo.stringify(options)}; } } }, pageSize: 20, serverPaging: false, serverFiltering: false, serverSorting: false, schema: { model: { id: 'id', fields: { id: {editable: false, nullable: true, type: 'number'}, supporter_id: {type: 'number'}, supporter_name: {type: 'string'}, supportee_id: {type: 'number'}, supportee_name: {type: 'string'}, created_at: {editable: false, type: 'date'}, updated_at: {editable: false, type: 'date'} } } } }); $('#grid').kendoGrid({ dataSource: dataSource, editable: { mode: 'popup', template: kendo.template($('#popup_editor').html()) }, edit: function(e) { $(e.container) .find('input[name="Customer Support Rep"]') .data('kendoAutoComplete') .bind('change', function(e) {}) .bind('select', function(e) { var csc = this.dataItem(e.item.index()); // Note .change is required to update underlying data source. $('input[name="SupporterID"]').val(csc.user_id).change(); }); $(e.container) .find('input[name="Researcher"]') .data('kendoAutoComplete') .bind('change', function(e) {}) .bind('select', function(e) { var csc = this.dataItem(e.item.index()); // Note .change is required to update underlying data source. $('input[name="SupporteeID"]').val(csc.user_id).change(); }); e.sender.editable.validatable._errorTemplate = kendo.template($('#tooltip-template').html()); // TODO - Chrome Hack - Remove this when jQuery is v1.8 or above. $('.k-widget.k-window').css('webkit-transform', 'scale(1)'); }, toolbar: ['create'], height: 500, filterable: true, sortable: true, pageable: true, columns: [{ field: 'supporter_name', title: 'Customer Support Rep', type: 'string' }, { field: 'supportee_name', title: 'Researcher', type: 'string' }, { field: 'created_at', title: 'Created At', type: 'date', format: '{0:dd-MMM-yyyy hh:mm tt}', parseFormats: ["yyyy-MM-dd'T'HH:mm:ss.zz"] }, { field: 'updated_at', title: 'Updated At', type: 'date', format: '{0:dd-MMM-yyyy hh:mm tt}', parseFormats: ["yyyy-MM-dd'T'HH:mm:ss.zz"] }, { command: ['edit', 'destroy'], title: ' ', width: '175px' }] }); var popupNotification = $("#popupNotification").kendoNotification().data("kendoNotification");<% end %>