0

我对javascript比较陌生。我正在使用 appcelerator 的 Titan 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);

但是,我知道 data 是一个数组对象,而 subID 是一个字符串。如何将对象的名称与字符串组合,然后将其转换为再次引用对象?

谢谢,如果上面有任何不清楚的地方,请告诉我。我已经为此苦苦挣扎了很长时间。

编辑:

换句话说,这就是我需要的:

我有一个字符串,我想用它来引用一个数组。

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

我需要的是数组/对象函数的神奇字符串。

4

3 回答 3

1

我对钛的了解不足以直接回答这个问题,但这里有一个提示。钛的全局对象是什么?你知道,如果你声明一个全局变量,那个变量属于什么对象呢?

在浏览器环境中,全局对象是window。使用全局变量或调用全局函数,实际上就是访问窗口对象的属性和调用方法。因此,在网络浏览器中:

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 浏览器。不知道你能不能用钛做这个。

于 2010-11-19T06:27:58.340 回答
0

可能有一种更优雅的方法可以做到这一点,但我很累:] 但是你可以使用哈希表作为解决方案

Javascript 哈希表

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

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

像这样的东西可能会奏效。

于 2010-11-19T03:39:44.460 回答
0

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

tableView.setData(data[win.subID]);
于 2010-11-14T19:58:28.580 回答