2012-03-29 41 views
0

当我运行这个示例时,它会导致一个错误:“Uncaught TypeError:无法调用未定义的方法get',问题是sotre1在呈现列时长度为0,但我找不到解决方案来解决这个。场景可能不合理,但我只想使用独立商店呈现网格列,有没有一种方法可以确保store1在呈现列之前加载? 这里是代码:可能Ext JS使用商店没有附加到网格呈现网格列?

Ext.onReady(function(){ 
Ext.define('File', { 
    extend: 'Ext.data.Model', 
    fields: ['id', 'name', 'pid'] 
}); 
var store = Ext.create('Ext.data.Store', { 
    model: 'File', 
    //fields: ['id', 'name', 'pid'], 
    proxy: { 
     type: 'ajax', 
     url: 'file.json', 
     reader: { 
      type: 'json', 
      root: 'files', 
      successProperty: 'success' 
     } 
    }, 
    autoLoad: true 
}); 
var store1 = Ext.create('Ext.data.Store', { 
    model: 'File', 
    proxy: { 
     type: 'ajax', 
     url: 'file.json', 
     reader: { 
      type: 'json', 
      root: 'files', 
      successProperty: 'success' 
     } 
    }, 
    autoLoad: true 
}); 
Ext.create('Ext.grid.Panel', { 
    renderTo: Ext.getBody(), 
    title: 'File info', 
    store: store, 
    columns: [ 
     { 
      header: 'ID', 
      dataIndex: 'id' 
     }, 
     { 
      header: 'Name', 
      dataIndex: 'name' 
     }, 
     { 
      header: 'ParentName', 
      dataIndex: 'pid', 
      renderer: function(pid){ 
       var index = store1.find('id', pid); // find it's parent 
       console.log(index); 
       var name = store1.getAt(index).get('name'); 
       return name; 
      } 
     } 
    ] 
}); 

}); 

这里是JSON文件:

{ 
success: true, 
files: [ 
    {id: 1, name: 'root', pid: 1}, 
    {id: 2, name: 'sub1', pid: 1}, 
    {id: 3, name: 'sub2', pid: 1}, 
    {id: 4, name: 'sub1-1', pid: 2}, 
    {id: 5, name: 'sub1-2', pid: 2} 
] 
} 

回答

0

可能更容易压扁在服务器端的结构和各子记录一起发送父名称。

我发现另一件事你的商店是相同的,为什么不只是使用1?

+0

这实际上是一样的,但我只是想用它没有连接到电网的店呈现网格的列(本演示中的store1) – neil 2012-03-29 12:40:55

+0

为什么你不能使用同一个商店? – dbrin 2012-03-29 18:14:10

0

这可能是一个与AJAX调用的异步性质相关的问题,因此在访问其记录时无法加载store1。

你可以试着放置Ext.create store1.load的回调()内拨打:

store1.load({ 
    callback: function() { 
     Ext.create('Ext.grid.Panel', ...); 
    } 
});