我正在開發一個Titanium應用程序,並且構建了一個函數來運行sqlite數據庫查詢並返回一個結果集(數組)。來自數組值的Javascript動態變量名(Appcelerator Titanium)
我不會打擾Titaniums的細節太多,因爲它不會對我面臨的問題造成太大的影響。
基本上任何查詢都可以使用這個函數來執行,所以一旦執行它,你自然需要一個與某些數據庫列名對應的數據數組。這是我遇到問題的地方。與鈦系統的工作方式,我需要的結果推到一個結果數組,像這樣:
var resultSet = conn.execute('SELECT * FROM some_table WHERE parent = ?', parent);
if (resultSet.isValidRow()) {
result = {
id: resultSet.fieldByName('id'),
name: resultSet.fieldByName('name'),
parent: resultSet.fieldByName('parent'),
order: resultSet.fieldByName('order')
};
}
好,因此多數民衆贊成一切ok。但它不夠動態。當你想從不同的表中選擇不同的字段時會發生什麼。身份證,姓名,父母和訂單顯然不起作用。
我試圖做的是採取一個數組(我已經有)和使用的值作爲自己的名字,像這樣:
var resultSet = conn.execute(<!-- SQL IS IN HERE -->);
var fieldCount = resultSet.fieldCount();
var fields = [];
for(i=0;i<fieldCount;i++) {
fields.push(resultSet.fieldName(i));
};
// At this point we have an array 'fields' which contains all the field names.
var results = [];
while (resultSet.isValidRow()) {
results.push({
// START OF PROBLEM
for(i=0; i < fields.length; i++)
{
fields[i]: resultSet.fieldByName(fields[i]);
}
// END OF PROBLEM
});
resultSet.next();
};
resultSet.close();
註釋的開始/結束上面顯示問題碼。我意識到它的錯誤,但無法弄清楚它應該如何。假設字段數組包含'id'和'name',我需要變量來覆蓋它們中的兩個,但它們必須是動態的 - 我想避免爲每個表創建一個新的javascript函數。
我應該指出,我是一個PHP的傢伙,我在JS的經驗非常有限。我一直在用這個作爲學習的機會,但我無法理解這一點!真的很抱歉,如果它沒有足夠清楚地解釋,並希望JS的大師能夠在這裏伸出援助之手!
乾杯
感謝您的迴應雅各布 - 這確實讓更多的意義比我了!儘管如此,我確實似乎遇到了問題。 「fields [i]:resultSet.fieldByName(fields [i])」這一行出現了一個令人討厭的錯誤:「[ERROR] Script Error =表達式結果'results [i]'[undefined]不是一個對象,在builder.js(第45行)。「數據庫絕對是填充的,就像我用一個簡單的警報來替換該行,顯示它的字段名稱,ID和結果。任何想法可能是錯的?我沒有清除緩存/重建/等,但仍然沒有運氣:( – Sk446 2011-04-16 09:37:56
@RickM,嗯,現在怎麼樣? – 2011-04-18 07:45:21