Catalyst :: View :: JSON и вопрос формата данных jqGrid - PullRequest
1 голос
/ 28 июня 2010

Я использую Catalyst :: View :: JSON и Catalyst :: TraitFor :: Controller :: jQuery :: jqGrid для извлечения данных JSON на первой странице.Ниже приведен код (частично скопированный из примера Catalyst :: TraitFor :: Controller :: jQuery :: jqGrid):

   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';
}

Но я обнаружил, что формат немного странный:

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

На самом деле, как и в случае jqGrid, формат данных должен быть:

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

Значит ли это, что пары "current_view" и "json_data" являются избыточными?Так есть ли способ удалить current_view и json_data перед отправкой сервера?или я использую модули неправильно?Я новичок в Catalyst и jqGrid, пожалуйста, помогите.Любые ответы действительно приветствуются!

1 Ответ

0 голосов
/ 13 июля 2010

Какой вид JSON вы используете? Кажется, что он конвертирует все в тайнике (это по умолчанию.) JSON-представление должно быть сконфигурировано так, чтобы конвертировать только в поле json_data тайника.

в вашем MyApp.pm добавьте что-то вроде:

MyApp-> конфигурации ({ 'View :: JSON' => { expose_stash => 'json_data' } });

заменив MyApp именем вашего контроллера приложения.

...