1) // create 最基本建立Record和Store的方法
var myStore = new Ext.data.Store();
var TopicRecord = Ext.data.Record.create([
{name: 'title', mapping: 'topic_title'},
{name: 'author', mapping: 'username'},
{name: 'totalPosts', mapping: 'topic_replies', type: 'int'},
{name: 'lastPost', mapping: 'post_time', type: 'date'},
{name: 'lastPoster', mapping: 'user2'},
{name: 'excerpt', mapping: 'post_text'}
]); // 列表影射,columnModel
var myNewRecord = new TopicRecord({
title: 'Do my job please',
author: 'noobie',
totalPosts: 1,
lastPost: new Date(),
lastPoster: 'Animal',
excerpt: 'No way dude!'
}); // 實際的一條記錄
myStore.add(myNewRecord);
2) // 這種方法也可以構建一個store
var store = new Ext.data.SimpleStore({
fields: ['abbr', 'state', 'nick'], // 一定要有這個,如果放在grid中,與column的dataIndex屬性值對應
data : [
['AL', 'Alabama', 'The Heart of Dixie'],
['AK', 'Alaska', 'The Land of the Midnight Sun'],
['IN', 'Indiana', 'The Hospitality State']
]
});
3) 還有一個種方法,用ArrayReader,數據源是js二維數組,用SimpleStore
var store = new Ext.data.SimpleStore({
/*
數據源:[ [1, 'AL', '0.1', 'The Heart of Dixie', '6', new Date()] ]
ArrayReader中, ajax會返回一個數據源給ArrayReader,
fields數組與數據源的序列的順序要相同
*/
fields: ['pid', 'company', 'price', 'change', 'pctChange', 'lastChange'],
url: 't2.php',
reader: new Ext.data.ArrayReader(
{id: 0},
/*
id 的取值應為下面的mapping的值,如果在下面沒有出現,則取數據源的0序列
,recordid可通過store.getById(recordid) 取得相應的 Record
當有 id 這個屬性設置的時候,如果id值為2,就表示用price作recordid
, 如果 name 的值與數據源的序列的名稱相同,就可以不指定mapping
*/
[{name:'company',mapping: 1}, {name:'price',mapping: 2}, {name:'change',mapping: 3}, {name:'pctChange',mapping: 4}, {name:'lastChange',mapping: 5}]
)
});
// 因為使用url會觸發ajax, 是異步方式,如果是要ajax讀取數據后馬上觸發事件,
// 必須添加load事件的監聽
store.addListener('load', function(st, rds, opts) {
// st 是當前的store, rds是讀到的Record[], opts是store的配置
//alert(rds.getTotalCount());
nextstore.removeAll(); //先清除另一個store的內容
nextstore.add(rds); // 給另一個store添加這些records
//for( var c=0; c<rds.length; c++ ) store.addSorted(rds[c]);
});
store.load();
4) 還有一個種方法,用XmlReader,數據源是xml, 只能用Ext.data.Store,不能用SimpleStore
就因為SimpleStore,害我搞了n久才發現只能用Store
先看數據源:
<?xml?>
<dataset>
<results>2</results>
<row>
<id>1</id>
<name>Bill</name>
<occupation>Gardener</occupation>
</row>
<row>
<id>2</id>
<name>Ben</name>
<occupation>Horticulturalist</occupation>
</row>
</dataset>
js:
var store = new Ext.data.Store({
fields: ['id', 'name', 'occupation'],
url: 't2.php',
reader: new Ext.data.XmlReader(
{
record: "row", // xml中每行數據的內容
totalRecords: "results", // xml中的results節點,表時記錄數 (option)
id: 'id'
// 每行數據的素引,xml中是row標簽的子節點, 作recordid, (option),
// 如果id列在數據源中的值有重復,就只會顯前面的列,后面的放棄.
},
/*
id 的取值應為下面的mapping的值,如果在下面沒有出現,則取數據源的0序列
當有 id 這個屬性設置的時候,如果id值為2,就表示用price作recordid
下面的mapping,是定義的素引與xml中的節點對應
, 如果 name 的值與數據源的序列的名稱相同,就可以不指定mapping
*/
[{name:'name',mapping: 'name'}, {name:'occupation'} ]
// 這里也可寫成 ['id', 'name', 'occupation']
)
});
// 因為使用url會觸發ajax, 是異步方式,如果是要ajax讀取數據后馬上觸發事件,
// 必須添加load事件的監聽
store.addListener('load', function(st, rds, opts) {
// st 是當前的store, rds是讀到的Record[], opts是store的配置
//alert(rds.getTotalCount());
nextstore.removeAll(); //先清除另一個store的內容
nextstore.add(rds); // 給另一個store添加這些records
//for( var c=0; c<rds.length; c++ ) store.addSorted(rds[c]);
});
store.load();
----------------http://cwq.jsp-tech.cn/2008/04/extjsrecordstore.html
posted on 2008-09-18 15:34
紫蝶∏飛揚↗ 閱讀(5099)
評論(2) 編輯 收藏 所屬分類:
EXTJS