2010-11-14 57 views
0

我對JavaScript比較陌生。我使用appcelerator的鈦SDK來創建一個移動應用程序,但它只使用JavaScript。使用字符串來定位對象

無論如何,我有一個層次結構菜單系統,我正在創建。我有數據數組填充子菜單項。每個數據數組都填充有不同的子菜單。當我點擊一個菜單項時,它會收到一個變量,讓應用程序知道下一個要裝入的數據數組。下面是一個基本的例子:

var data = [ 
    {title:'Item 1',subID:'1', hasDetail:true,}, 
    {title:'Item 2',subID:'1', hasDetail:true,} 
]; 

var data1 = [ 
    {title:'Child1',subID:'1_1', hasDetail:true}, 
    {title:'Child2', subID:'1_2', hasDetail: true} 
]; 

var data1_1 = [ 
    {title:'Grandchild1'}, 
    {title:'Grandchild2'} 
    ]; 

    // I have a ton of menu items though, so the method I'm using 
    // below is very inefficient: 
    if(win.subID == '1'){ 
     tableview.setData(data1); 
    } else if(win.subID == '2'){ 
     tableview.setData(data2); 
    } 

還有更多的菜單(1,2,3,4等和1_1,1_2,1_3,2_1,2_2等),所以上述設置數據的方法效率極低。我想這樣的是這樣的:

tableview.setData(data + win.subID); 

但是,我知道數據是一個數組對象和subID是一個字符串。我怎樣才能將一個對象的名字與一個字符串結合起來,然後將它轉換爲再次引用一個對象?

謝謝,請讓我知道,如果上述任何東西都不清楚。我一直在爲此奮鬥很長時間。

編輯:

這就是我需要在其他詞的:

我有一個字符串,我想用引用數組。

data1 = [ 
    {value: 1}, 
    {value: 2} 
] 
var string = 'data1'; 
magicStringToArrayFunction(string); 
tableview.setData(string); 

我需要的是魔法字符串數組/對象函數。

+0

這個不清楚... – 2010-11-14 19:57:06

+0

我怎樣才能讓它更清晰? – Connor 2010-11-14 20:25:11

回答

0

我想你想要的是數組,所以你可以做到這一點的數組...

tableView.setData(data[win.subID]); 
+0

如果每個數據集都是較大數組的一部分,那麼這將起作用。但是,每個數組都是完全獨立的數組,我們稱之爲data1,data2,data1_1等。我有一個字符串,它需要顯示的數組的數量,但我不知道如何使用該字符串來實際地定位該數組。 – Connor 2010-11-14 20:27:43

+0

@Connor這就是爲什麼我說這個問題令人困惑... – 2010-11-14 21:17:16

+0

我編輯我的原始帖子與另一個例子。希望能夠解決這個問題。 – Connor 2010-11-15 01:31:46

0

有可能是這樣做的更優雅的方式,但我厭倦了:] 但你可以使用哈希表作爲解決

Javascript hash tables

var myArray = new Array(); 
myArray['data1_1'] = data1_1; 
myArray['data1'] = data1; 
myArray['data'] = data; 

var thestring='data1'; 
tableview.setData(myArray[thestring]); 

類似的東西可以做的伎倆。

1

我不知道鈦足以直接回答這個,但這裏有一個提示。鈦的全球目標是什麼?你知道,如果你聲明一個全局變量,那個變量屬於哪個對象?

在瀏覽器環境中,全局對象是窗口。使用全局變量或調用全局函數實際上是訪問窗口對象的屬性和調用方法。因此,在網絡瀏覽器:

setTimeout(foo, 10) 
// is the same as: 
window.setTimeout(foo, 10) 
// is the same as: 
window['setTimeout'](foo,10) 

x = 5 
// is the same as: 
window.x = 5 
// is the same as: 
window['x'] = 5 
你的情況

因此,如果這是一個普通的網頁瀏覽器,你的代碼將是:

var string = 'data1'; 
tableview.setData(window[string]); 

並非所有的JavaScript這些實現以這種方式工作,這可以在所有已知的具有JavaScript支持的Web瀏覽器上使用。不知道你是否可以用鈦做到這一點。