使用字符串来定位对象

时间:2010-11-14 19:52:21

标签: javascript string object titanium appcelerator

我对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);

我需要的是魔法字符串到数组/对象的功能。

3 个答案:

答案 0 :(得分: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

因此,在您的情况下,如果这是一个常规的Web浏览器,您的代码将是:

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

并非所有javascript实现都以这种方式工作,这适用于所有已知的支持javascript的Web浏览器。不知道你是否能用钛做到这一点。

答案 1 :(得分:0)

我认为你想要的是一个数组数组,所以你可以这样做......

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

答案 2 :(得分: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]);

这样的事情可能会成功。