jqGrid Help ( was: Re: [Catalyst] Nonsensical Problem with DBIx ResultSet )

Kyle Hall kyle.m.hall at gmail.com
Thu Jul 8 17:45:08 GMT 2010


I figured it out. I simply had to include grid.locale-en.js *before*
jquery.jqGrid.min.js. Again, thanks for the help.

Kyle

http://www.kylehall.info
Mill Run Technology Solutions ( http://millruntech.com )
Crawford County Federated Library System ( http://www.ccfls.org )
Meadville Public Library ( http://www.meadvillelibrary.org )



On Thu, Jul 8, 2010 at 1:08 PM, Kyle Hall <kyle.m.hall at gmail.com> wrote:

> Thanks for the help! It seems very obvious in retrospect. I guess I was
> just expecting a to get warns instead of errors. It's working well now.
> Thanks again.
>
> Now on to the next problem:
>
> I'm trying to load a jqGrid from json data made via a REST call. But my
> grid is just a blank rectangle on the page. Here is my code:
>
> <body>
>
> <div id=3D"tabs">
>
>     <ul>
>         <li><a href=3D"#panel-users">Users</a></li>
>
>         <li><a href=3D"#panel-clients">Clients</a></li>
>
>     </ul>
>     <div id=3D"panel-users">
>
>         <table id=3D"list"></table>
>
>         <div id=3D"pager"></div>
>
>     </div>
>     <div id=3D"panel-clients">
>
>     </div>
> </div>
>
> <script type=3D"text/javascript">
>
>     $(function() {
>         $("#tabs").tabs();
>
>     });
> </script>
>
> <script type=3D"text/javascript">
>
> jQuery(document).ready(function(){
>
>   jQuery("#list").jqGrid({
>     url:'http://192.168.20.155:3000/admin/rest/users',
>
>     dataType: 'json',
>     mtype: 'GET',
>
>     colNames:['Id','Username', 'Minutes','Status','Message','Notes','Trou=
blemaker'],
>
>     colModel :[
>       {name:'id', index:'id', width:11},
>
>       {name:'username', index:'username', width:90},
>
>       {name:'minutes', index:'minutes', width:3, align:'right'},
>
>       {name:'status', index:'status', width:80, align:'right'},
>
>       {name:'message', index:'message', width:80, align:'right', sortable=
:false},
>
>       {name:'note', index:'note', width:150, sortable:false},
>
>       {name:"troublemaker", index:'troublemaker', width:1}
>
>     ],
>     pager: '#pager',
>     rowNum:10,
>
>     rowList:[10,20,30],
>
>     sortname: 'username',
>     sortorder: 'desc',
>
>     viewrecords: true,
>     caption: 'My test grid',
>
>     jsonReader : {
>     root: "rows",
>
>     page: "page",
>     total: "total",
>
>     records: "records",
>     repeatitems: true,
>
>     cell: "cell",
>     id: "id",
>
>         userdata: "userdata"
>     }
>   });
> });
> </script>
>
>
> And here is the JSON data that the url returns:
>
>
> {"page":0,"records":"3","total":1,"rows":[{"cell":["1","admin","30","enab=
led",null,null,"0"]},{"cell":["2","test1","30","enabled",null,null,"0"]},{"=
cell":["3","test2","30","enabled",null,null,"0"]}]}
>
>  I know this isn't specifically a Catalyst question, but I thought someone
> here may have experienced this before. I'm using Controller::REST and
> Catalyst::TraitFor::Controller::jQuery::jqGrid. Any help would be greatly
> appreciated.
> Here is the REST controller for posterity:
> package LibkiServer::Controller::Admin::REST;
> use Moose;
> use namespace::autoclean;
>
> with 'Catalyst::TraitFor::Controller::jQuery::jqGrid';
>
> BEGIN {extends 'Catalyst::Controller::REST'; }
>
> =3Dhead1 NAME
>
> LibkiServer::Controller::Admin::REST - Catalyst REST Controller
>
> =3Dhead1 DESCRIPTION
>
> Catalyst REST Controller for Administration.
>
> =3Dhead1 METHODS
>
> =3Dcut
>
>
> =3Dhead2 index
>
> =3Dcut
>
> sub users : Local : ActionClass('REST') { }
>
> sub users_GET {
>     my ( $self, $c ) =3D @_;
>
>     my $user_rs =3D $c->model('DB::User')->search( {}, { prefetch =3D> {
> session =3D> 'client' } } );
>     $user_rs =3D $self->jqgrid_page( $c, $user_rs );
>
>     my $row =3D 0;
>     my @row_data;
>
>     while ( my $user =3D $user_rs->next() ) {
>         my $user_id =3D $user->id;
>
>         my @cell;
>         push( @cell, $user->id );
>         push( @cell, $user->username );
>         push( @cell, $user->minutes );
>         push( @cell, $user->status );
>         push( @cell, $user->message );
>         push( @cell, $user->notes );
>         push( @cell, $user->is_troublemaker );
>         push( @cell, defined( $user->session ) ? $user->session->status :
> undef );
>         push( @cell, defined( $user->session ) ? $user->session->client->=
id
> : undef );
>         push( @cell, defined( $user->session ) ?
> $user->session->client->clientname : undef );
>         my $single_row =3D {
>             cell =3D> \@cell
>         };
>         push( @row_data, $single_row );
>
>     }
>
>     $self->status_ok(
>         $c,
>         entity =3D> {
>             page =3D> $c->stash->{json_data}->{page},
>             total =3D> $c->stash->{json_data}->{total},
>             records =3D> $c->stash->{json_data}->{records},
>             rows =3D> \@row_data
>         }
>     );
> }
>
>
> http://www.kylehall.info
> Mill Run Technology Solutions ( http://millruntech.com )
> Crawford County Federated Library System ( http://www.ccfls.org )
> Meadville Public Library ( http://www.meadvillelibrary.org )
>
>
>
> On Thu, Jul 8, 2010 at 12:02 PM, Jeff Albert <jralbert at uvic.ca> wrote:
>
>>  Some of your users have sessions, and thus will have a row or rows in
>> the related =91session=92 resultset =96 but some don=92t. When you attem=
pt to access
>> $user->session->client->clientname, you=92re assuming that $user->sessio=
n is
>> defined =96 but in the case of a user row with no related session row,
>> $user->session won=92t be defined, and you=92ll raise the error you desc=
ribed
>> when you attempt to access the methods of that resultset. Do a quick
>> defined() test on $user->session before you try to use its methods, and
>> you=92ll be good to go. Hope that helps!
>>
>>
>>
>> Cheers,
>>
>> Jeff Albert
>>
>>
>>
>> *From:* Kyle Hall [mailto:kyle.m.hall at gmail.com]
>> *Sent:* Thursday, July 08, 2010 7:57 AM
>> *To:* catalyst at lists.scsys.co.uk
>> *Subject:* [Catalyst] Nonsensical Problem with DBIx ResultSet
>>
>>
>>
>> Hello all,
>>   I'm the developer of a FOSS kiosk management system, Libki. I'm in the
>> early stages of a complete rewrite using Catalyst for the web-based
>> administration interface. This is my first time using Catalyst, but I'm =
very
>> excited by the possibilities! I'm having a very strange issue with my
>> resultsets. For example, I have three tables, a users table, a clients
>> table, and a sessions table that connects the user to a client.
>>
>> I grab my users from the database, with any session/client data if the
>> user is currently logged in to a client kiosk. I am prefetching the sess=
ion
>> and client table data.
>>
>> my $user_rs =3D $c->model('DB::User')->search( {}, { prefetch =3D> { ses=
sion
>> =3D> 'client' } } );
>>
>> Now I want to loop through it.
>>
>>     my $row =3D 0;
>>     my @row_data;
>>
>>     while ( my $user =3D $user_rs->next() ) {
>>         my $user_id =3D $user->id;
>>
>>         warn $user->session->client->clientname;
>>
>>         my $single_row =3D {
>>             cell =3D> [
>>                 $user->id,
>>                 $user->username,
>>                 $user->minutes,
>>                 $user->status,
>>                 $user->is_troublemaker,
>>                 $user->session->client->clientname;
>>             ]
>>         };
>>         push( @row_data, $single_row );
>>     }
>>
>>
>> Now, if I try to access any of the other tables, I get an error:
>> [error] Caught exception in LibkiServer::Controller::Admin::REST->users
>> "Can't call method "client" on an undefined value at
>> /home/libki/LibkiServer/script/../lib/LibkiServer/Controller/Admin/REST.=
pm
>> line 40."
>>
>> I don't know why I get this error, but the really crazy part is *the warn
>> still works*:
>> Client Name: testclient1 at
>> /home/libki/LibkiServer/script/../lib/LibkiServer/Controller/Admin/REST.=
pm
>> line 40.
>>
>> If anyone can help me out, I'd be eternally grateful.
>>
>> Thanks,
>> Kyle
>>
>> http://www.kylehall.info
>> Mill Run Technology Solutions ( http://millruntech.com )
>> Crawford County Federated Library System ( http://www.ccfls.org )
>> Meadville Public Library ( http://www.meadvillelibrary.org )
>>
>> _______________________________________________
>> List: Catalyst at lists.scsys.co.uk
>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>> Searchable archive:
>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>> Dev site: http://dev.catalyst.perl.org/
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20100708/34d7c=
ec3/attachment.htm


More information about the Catalyst mailing list