我是Extjs的新手,并不熟悉Javascript及其相关库。现在我想做的是:
向远程服务器发送GET请求,例如GET http://remote-restful-server.com/find/ {id}。
服务器将返回JSON格式的数据。数据如下:
[{
id: 1,
level01: "Food",
level02: null,
level03: null,
code: "XXXX",
link: ABC1
},
{
id: 2,
level01: "Food",
level02: "Fruit",
level03: null,
code: "XXXX",
link: ABC1
},
..., ...]
我想在extjs的夹点中显示这些数据。但是当我这样做时,我遇到了一些问题:
1){id}是从本页面的网址获取的第1步。如何使用Extjs在URL中获取参数?
2)如何向restful Web服务发出GET请求并返回JSON数据?
3)如何通过Extjs中的网格组件显示所有数据? JSON数组中所有元素的字段都是固定的。
4)我希望网格中的某些列包含链接。怎么做?
5)如何在显示之前对几个特定字段进行一些更改?
我试图在阵列网格上显示json数据。但我失败了。看来我无法成功加载json数据。代码是:
Ext.onReady(function() {
// Define a product model
Ext.define('Product', {
extend: 'Ext.data.Model',
fields: [
{name: 'product_id', type: 'int'},
'large_class_code',
'medium_class_code',
'small_class_code',
'product_code',
'large_class_name',
'medium_class_name',
'small_class_name',
'product_name',
'current_level',
'current_code',
'current_name',
'parent_id',
'parent_name',
'has_standards'
]
});
// create the data store
var store = Ext.create('Ext.data.Store', {
model: 'Product',
proxy: {
type: 'ajax',
url : 'http://xxx.xxx.xx.xxx:8080/product/all/',
reader: {
type: 'json'
}
}
});
store.load();
//console.log(store);
// create the grid
var grid = Ext.create('Ext.grid.Panel', {
store: store,
columns: [
{id:'id',header: 'ID', width: 30, sortable: true, dataIndex: 'product_id'},
{header: 'large_class_code', width: 100, sortable: true, dataIndex: 'large_class_code'},
{header: 'medium_class_code', width: 100, sortable: true, dataIndex: 'medium_class_code'},
{header: 'small_class_code', width: 100, sortable: true, dataIndex: 'small_class_code'},
{header: 'product_code', width: 100, sortable: true, dataIndex: 'product_code'},
{header: 'large_class_name', width: 100, sortable: true, dataIndex: 'large_class_name'},
{header: 'medium_class_name', width: 100, sortable: true, dataIndex: 'medium_class_name'},
{header: 'product_name', width: 100, sortable: true, dataIndex: 'product_name'},
{header: 'current_level', width: 100, sortable: true, dataIndex: 'current_level'},
{header: 'current_code', width: 100, sortable: true, dataIndex: 'current_code'},
{header: 'current_name', width: 100, sortable: true, dataIndex: 'current_name'},
{header: 'parent_id', width: 100, sortable: true, dataIndex: 'parent_id'},
{header: 'parent_name', width: 100, sortable: true, dataIndex: 'parent_name'},
{header: 'has_standards', width: 100, sortable: true, dataIndex: 'has_standards'}
],
stripeRows: true,
height:600,
width:2000,
renderTo: 'grid-example',
title:'test list'
});
});
可以显示网格,但不显示任何数据。我用chrome检查控制台:
我得到了:
选项http://xxx.xxx.xx.xxx:8080/product/all/?_dc=1384145304301&page=1&start=0&limit=25 Access-Control-Allow-Origin不允许原始http://xxx.xxx.xx.xxx。
和
XMLHttpRequest无法加载http://xxx.xxx.xx.xxx:8080/product/all/?_dc=1384145304301&page=1&start=0&limit=25。 Access-Control-Allow-Origin不允许原点http://xxx.xxx.xx.xxx。
答案 0 :(得分:2)
对于第1点和第2点,您可以阅读:Detailed documentation for ExtJS REST request / response handling?
对于第3点:如果您正在使用ExtJs4(并且您应该),网格将限制为商店,这就是您通过网格显示信息的方式http://docs.sencha.com/extjs/4.2.2/#!/guide/application_architecture
对于第4点和第5点,您可以在网格列上使用“渲染器”配置。
最好的问候。