views:

59

answers:

1

Hi,

I'm using Catalyst::View::JSON and Catalyst::TraitFor::Controller::jQuery::jqGrid to retrieve JSON data to front page. Below is the code concerned (copy much partially from Catalyst::TraitFor::Controller::jQuery::jqGrid example):

   package UW::Controller::Site;
use utf8;
use Moose;
use namespace::autoclean;
BEGIN {extends 'Catalyst::Controller'; }
with 'Catalyst::TraitFor::Controller::jQuery::jqGrid';

sub json : Local{
my ($self, $c) = @_;
my $merchant_rs = $c->model('WindyDB::Merchant')->search({});
$merchant_rs = $self->jqgrid_page($c, $merchant_rs);
   my $row = 0;
my @row_data;
my $i = 0;
while (my $mer = $merchant_rs->next){
$i ++;
my $mer_id = $mer->mer_id;
$c->log->debug($mer_id);
my $single_row = {
'id'   => $i,
'cell' => [
'id' => $mer->mer_id,
'name' => $mer->mer_name,
],
};
push @row_data, $single_row;

}

$c->log->debug( @row_data);
$c->stash->{json_data}->{rows} = \@row_data;
$c->stash->{current_view}  = 'JSON';
}

But I found the format is a little weird :

{"current_view":"JSON","json_data":{"page":0,"records":"8","rows":[{id:1,
cell:["test1","6"]},{id:2, cell["test2","7"]}],"total":1}}

Actually, as jqGrid doument, data format should be:

{ total: "xxx", page: "yyy", records: "zzz", rows : [ {id:"1",
cell:["cell11", "cell12", "cell13"]}, {id:"2", cell:["cell21",
"cell22", "cell23"]}, ... ] }

Does That means "current_view" and "json_data" pairs are surplus? So is there a way to remove current_view and json_data before server ship? or does I use the modules incorrectly? I'm new to Catalyst and jqGrid, please help. Any replies are really appreciated!

A: 

What JSON view are you using? It seems that it is converting everything in the stash (This is the default.) The JSON view needs to be configured to only convert things in json_data field of the stash.

in your 'MyApp.pm' add something like:

MyApp->config({ 'View::JSON' => { expose_stash => 'json_data' } });

replacing MyApp with the name of your application controller.

gdey