0

私はjavascriptに比較的慣れていません。私はappceleratorのtitaniumSDKを使用してモバイルアプリを作成していますが、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);

私が必要としているのは、配列/オブジェクト関数へのその魔法の文字列です。

4

3 に答える 3

1

私はこれに直接答えるほどチタンを知りませんが、ここにヒントがあります. チタンのグローバルオブジェクトは何ですか? グローバル変数を宣言した場合、その変数はどのオブジェクトに属しているのでしょうか?

ブラウザ環境では、グローバル オブジェクトは window です。グローバル変数を使用したり、グローバル関数を呼び出したりすることは、実際にはウィンドウ オブジェクトのプロパティにアクセスしてメソッドを呼び出すことです。したがって、Web ブラウザーでは次のようになります。

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 ブラウザーで機能します。チタンでこれができるかどうかはわかりません。

于 2010-11-19T06:27:58.340 に答える
0

あなたが欲しいのは配列の配列だと思うので、これを行うことができます...

tableView.setData(data[win.subID]);
于 2010-11-14T19:58:28.580 に答える
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 に答える