2010-06-28 30 views
0

我正在使用Catalyst :: View :: JSON和 Catalyst :: TraitFor :: Controller :: jQuery :: jqGrid来检索JSON数据 到首页。以下是有关的代码(多部分来自 催化剂复制:: TraitFor ::控制器:: jQuery的:: jqGrid的例子): Catalyst :: View :: JSON和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的doument,数据格式应该是:

 
{ 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, 请帮忙。 任何回复真的很感激!

回答

0

您使用的是哪种JSON视图?看起来它正在转换隐藏的所有内容(这是默认设置).JSON视图需要配置为仅在隐藏的json_data字段中进行转换。

在你的 'MyApp.pm' 添加类似

MyApp->配置({ '查看:: JSON'=> { expose_stash => 'json_data' } });

将MyApp替换为您的应用程序控制器的名称。