2011-06-13 135 views
1

我在ExtJS上有这个问题。我创建了一个显示在窗口上的网格,它将从外部服务器端脚本获取json数据。这是工作的肮脏,但萤火虫不断告诉我,商店是未定义的一切,我点击网格中的列。你能帮我解决这个问题吗?这里是我的代码:商店未定义

var fields = [{ 
    name: "Name", 
    type: "text" 
}, { 
    name: "NSId", 
    type: "number" 
}, { 
    name: "Id", 
    type: "number" 
}, { 
    name: "Version", 
    type: "number" 
}]; 

var columns = [{ 
    header: 'Name', 
    id: 'Name', 
    width: 160, 
    sortable: true, 
    dataIndex: 'Name' 
}, { 
    header: 'NSId', 
    id: 'NSId', 
    width: 45, 
    sortable: true, 
    hidden: true, 
    dataIndex: 'NSId' 
}, { 
    header: 'Id', 
    id: 'Id', 
    width: 30, 
    sortable: true, 
    hidden: true, 
    dataIndex: 'Id' 
}, { 
    header: 'Version', 
    id: 'Version', 
    width: 50, 
    sortable: true, 
    hidden: true, 
    dataIndex: 'Version' 
}]; 

var searchAndPickUrl = OcsConfig.url.refto; 
var pickerUrl = '?picker=' + config.picker; 
var createRefTo = searchAndPickUrl + pickerUrl; 

var jsonstore = { 
    xtype: 'jsonstore', 
    autoDestroy: true, 
    fields: fields, 
    root: 'candidates', 
    idProperty: 'Name', 
    url: createRefTo, 
    autoLoad: true 
}; 

var cmpGrid = null; 

var clickCell = function (trigger) { 
     var record = cmpGrid.getSelectionModel().getSelected(); 
     var selValues = record.data['name'] + ',' + record.data['nsid'] + ',' + record.data['id'] + ',' + record.data['version']; 
     Ext.Msg.alert('Name', selValues); 
    }; 

var refToGrid = { 
    id: Ext.id(), 
    xtype: 'grid', 
    store: jsonstore, 
    columns: columns, 
    stripeRows: true, 
    defaults: { 
     anchor: '100%' 
    }, 
    autoExpandColumn: 'Name', 
    height: 350, 
    width: 600, 
    title: '', 
    stateful: true, 
    stateId: 'grid', 
    listener: { 
     rowdblclick: clickCell 
    } 
}; 

var refToWin = function refToInputVal(trigger) { 
     var values = config.options || []; 
     var cmpWin = null; 
     var genId = Ext.id(); 
     var win = null; 

     if (cmpWin === null) { 
      win = { 
       xtype: 'window', 
       title: config.caption || '', 
       modal: true, 
       items: [{ 
        xtype: 'form', 
        id: genId, 
        padding: 5, 
        defaults: { 
         anchor: '100%' 
        }, 
        items: [refToGrid] 
       }], 
       bbar: [{ 
        xtype: 'button', 
        text: 'OK', 
        handler: function() { 
         returnValue(trigger, cmpGrid); 
         cmpWin.hide(); 
        } 
       }, { 
        xtype: 'button', 
        text: 'Cancel', 
        handler: function() { 
         cmpWin.hide(); 
        } 
       }], 

谢谢。

+0

我不能看到所有的代码,但使用* xtypes *宣告* ExtJS的*组件意味着相应的* ExtJS的*对象只** *后可用*通过将它们添加到已经实例化的* ExtJS *对象的现有集合中来实例化它们。 – Chau 2011-06-14 06:32:29

回答

1

更改您的商店声明...

var jsonstore = new Ext.data.JsonStore({ 
    autoDestroy: true, 
    fields: fields, 
    root: 'candidates', 
    idProperty: 'Name', 
    url: createRefTo, 
    autoLoad: true 
}); 
+0

呃..我的计划是创建一个可配置的变量,这就是为什么我使用xtypes。我可以问为什么我需要使用这个而不是xtypes。无论如何,非常感谢您的及时答复。 :) – madzman23 2011-06-13 08:06:15

+0

这个变量'jsonstore'仍然可以重用,ExtJS并没有像你这样做的方式正确解析它。 – JamesHalsall 2011-06-13 08:11:17