空的Arraystore

时间:2014-02-06 15:50:07

标签: extjs extjs3

我有一个引用商店的网格如下:

var s_store = new Ext.data.ArrayStore({
            root: 'map',
            autoLoad: True,
            ...
            idProperty:'businessResults',
            url : '....',
            fields: someRecord
            });




        var s_grid= new Ext.grid.EditorGridPanel ({
        store: s_store,
        id: 's_grid',
        title:'Involvement',
        header: true,
        ....
        });

});

商店从数据库加载数据记录 我面临的问题是,虽然数据库没有返回任何行 - 但是商店似乎显示Count为1(该行为空行)。
这会导致网格也显示一个emtpy行。 服务器的响应如下:

HTTP/1.1 200 OK
Date: Fri, 07 Feb 2014 03:41:12 GMT
Content-Length: 50
X-Powered-By: Servlet/2.5 JSP/2.1

{"map": [
  [
    "businessResults",
    {}
  ]
]}

为什么会发生这种情况 - 我该如何预防呢? 我正在使用extJs 3.4

2 个答案:

答案 0 :(得分:0)

我没有正确理解,但我对此问题有一个建议。 JsonStore中有一个属性totalProperty。此属性跟踪Json数组的返回值。所以,你可以把一个计数器放在返回值中,如下所示:

// here is the count variable holding the total value of the array
$invoicesData = array("success" => true, "count" => $num, "invoices" => array());
return json_encode($invoicesData);

然后,在您的商店定义中:

var invoiceStore = new Ext.data.JsonStore({
   root: 'invoices',
   totalProperty: 'count',
   successProperty: 'success',
   proxy: new Ext.data.HttpProxy({
      url: 'your-server-url',
      method: 'POST'
   }),
   fields: ['CustomerName', 'StoreName',
      {name: 'StoreNo', type: 'int'},
      {name: 'invoiceId', type: 'int'}
   ],
   idProperty: 'invoiceId'
});

答案 1 :(得分:0)

由于您已将“map”设置为商店的root属性,而在“map”下,您将有一个空的记录,将以网格显示。

   {"map": [
     [
       "businessResults",
       {}
     ]
  ]}

应该是这样的:

    {"map": [

    ]}

或者如果记录在此对象下,则应将store的root属性设置为“businessResults”。

最佳!!