Why isn't my checkbox working.
Why isn't my checkbox working.
Not sure what I am doing wrong here, the checkbox seems to work but is never displaying as checked in the table. Pretty sure this is something simple somewhere.
//setup the editor
editor = new $.fn.dataTable.Editor({
"ajax": {
"url": "/locationsAjax",
"type": "POST",
data: {table: "locations"}
},
//setup the Datatable
table = $('#generic_table').DataTable({ //took the var off to intentionally make it global
"ajax": {
"url": "/locationsAjax",
headers: {
'X-CSRF-TOKEN': 'qbb2Awfm4XI3zUf7Qg8Kj4WyAZjNhPWBAmMw27bJ'
},
"type": "POST",
"data": function(d){
d.table = "locations";
},
},
"columns": [
{
data: null,
defaultContent: '',
className: 'select-checkbox',
orderable: false
},
{ 'data': 'view_printing_locations.username',editField:'locations.user_id'},
{
data: 'locations.auth_required',
render: function ( data, type, row ) {
if ( type === 'display' ) {
return "<input type='checkbox' class='editor-locations.auth_required'>";
}
return data;
},
className: 'dt-body-center'
}
],
order: [1, 'asc'],
dom: "Bfrtip",
responsive: false,//true wont let me hide columns
"scrollY": "600px",
"scrollCollapse": true,
"paging": false,
select: {
style: 'single',
selector: 'td:first-child',
blurable: true
},
buttons: [{extend:'remove', editor: editor},{extend:'create', editor: editor},{extend:'edit', editor: editor},],
rowCallback: function ( row, data ) {
// Set the checked state of the checkbox in the table
$('input.editor-locations.auth_required', row).prop( 'checked', data.locations.auth_required == 1 );
},
});
Here is the PHP:
public function datatablesAjax()
{
$postData = $_POST;
Editor::inst($db, 'locations')
->fields(
Field::inst("locations.id"),
Field::inst( "locations.user_id" )
->options('view_printing_locations','id','username'),
Field::inst("view_printing_locations.username"),
Field::inst("locations.auth_required")
)
->leftjoin('view_printing_locations','view_printing_locations.id','=',"locations.user_id" )
->process($postData)
->json();
}
Does that make sense?
Mick
This question has accepted answers - jump to:
This discussion has been closed.
Answers
Change:
To be
class='editor-locations-auth_required'
and also update the jQuery selector in therowCallback
to reflect that change. The problem is that jQuery is trying to select an element which two different classes. You could escape the.
in the class name, but its easier to just change the class name.Allan
Brilliant! I never would have spotted that.
Thanks for your help.
Mick
I am now stuck because I have a description field in my locations table.
I want this to reflect the view_printing_locations.username field (so it is in the database which belongs to this application.)
Does that make sense? I want the user to select a view_printing_locations.username but then save the user_id and username (which are in my user manager database)in my locations table (in this applications database).
ajax.data?
maybe preEdit, just to copy the value into the other field:
->on('preEdit', function ($e, $id, $values) {
Just to check my understanding - you display the username to the end user, which they select from. Then you want to store both the username and the user id? Why not save just the user id (since the user name can be looked use from the user id - that redundant information isn't being stored)?
However, if that is what you need, you could listen for the
change
event on theusername
field and update the user id as appropriate:I'm not sure where you will get the user_id value from? Does that exist in a look up object somewhere?
Regards,
Allan
View_printing_locations pulls the username and id from a separate database. I am trying to avoid joining to the other db in other parts of this application. (Is that a good idea or not?).
Personally I would say no. Joins are very fast (as long as they are indexed) so there should be no concern about performance. And it means that you have redundant data, so updating can become very difficult. Imagine you have 5 tables that store the user name, you need to update them all if you want to simply change the user name, rather than having a single point of reference.
Allan
Thanks for your advice. It just felt a bit odd to keep joining to a different database.
I have ditched the username from this table and am adding joins in the other parts of my application.
I missed that point - when you say a separate database, do you mean a different server? Or a different db inside the same server? The later is fine, a different server though is a different matter.
It would be worth profiling your queries to make sure they are acceptable.
Alla
Same server. Got it all working now.
I would be surprised if the locations table ever reached a dozen records.
Cheers,
Mick
For a small table like that, it should be like greased lightning then
Allan