这是代码
onError = function(tx, e) {
alert('Something unexpected happened: ' + e.message );
}
var webdb = openDatabase(dbName, '1.0' , dbDesc , dbSize);
var colourArray = new Array();
webdb.transaction(function(tx) {
tx.executeSql('SELECT * FROM colours',
[],
function(tx,rs) {
var ctn = rs.rows.length;
for (var i=0; i < ctn; i++) {
var row = rs.rows.item(i);
colourArray.push([row.id , row.title]);
}
},
onError);
});
/**
* the array looks like [[1,'red'],[2,'white'],[3,'black'] ...]
*/
var ColourStore = new Ext.data.ArrayStore({fields: ['key', 'val'],
data: colourArray});
表“colors”包含颜色名称和哈希码。并且假设由ExtJS Ext.data.ArrayStore使用,然后填充大量表单上的其他下拉列表。
我的问题是 - 我无法将数据作为数组返回。变量“colourArray”是空的...我知道我遇到了一些javascript闭包,循环问题......但是我无法弄清楚如何获得内部循环值。尝试很多回报 - &gt;返回 - &gt;返回功能和更多返回。它们都不起作用。
答案 0 :(得分:0)
executeSQL是异步的。您需要在函数(tx,rs)回调函数中创建ColourStore。如果您需要全局可用的数据,则在executeSQL调用回调函数之前,您无法初始化您的应用程序。示例:
Ext.onReady( function() {
var webdb = openDatabase(dbName, '1.0' , dbDesc , dbSize);
var colourArray = new Array();
var ColourStore;
webdb.transaction( function(tx) {
tx.executeSql('SELECT * FROM colours',
[], function(tx,rs) {
var ctn = rs.rows.length;
for (var i=0; i < ctn; i++) {
var row = rs.rows.item(i);
colourArray.push([row.id , row.title]);
}
//INIT YOUR APP HERE IN ORDER TO HAVE ACCESS TO colourArray values
ColourStore = new Ext....
YourApp.init();
},
onError);
});
}, this);