0

RailsアプリからJSONを介してJSスクリプトに少し複雑なものを送信して、興味深い方法でページをレンダリングしようとしています。Railsのデータは人とその資産に関するものであり、次のようになっているとしましょう。

[
  {:name => 'Bill Smith', :state => 'KS'} => [
    {:type => 'house', :valuation => 150000},
    {:type => 'car', :valuation => 10000}
  ], 
  {:name => 'Bubba Jack', :state => 'FL'} => [
    {:type => 'boat', :valuation => 12000}
  ]
]

JS側では、個々のフィールドにアクセスできるようにしたいのですが、JSではオブジェクトのキーをオブジェクトにすることができないため、data.to_jsonはすべての人物の詳細を次のように1つの文字列に変換します。

[{"{:name=>\"Bill Smith\", :state=>\"KS\"}":[{"type":"house","valuation":150000},{"type":"car","valuation":10000}],"{:name=>\"Bubba Jack\", :state=>\"FL\"}":[{"type":"boat","valuation":12000}]}]

私は次のようなことはできません

var people = Object.keys(data);
for(var i=0; i<people.length; i++) {
    var totAsset = 0;
    var person = people[i];
    for(var j=0;j<data[person].length; j++) {
        totAssset = totAsset + data[person][j].valuation
    }
    alert("got person named " +person.name+" having $"+totAsset);
}

AJAXアプリのJS側で複雑なデータを表現して使用するための「正しい」方法は何ですか?

更新:したがって、sgrifとAndrewの両方の回答が、この特定の問題の解決策を提供します。私は両方に賛成しましたが、受け入れる前に、誰かがオブジェクトをキーまたはその機能を備えたものとして表現しなければならないというより一般的なアイデアがあるかどうかを確認するために少し待ちます。

4

2 に答える 2

2
[
  {name: "Bill Smith", state: "KS", possessions: [
    {type: "house", valuation: 1500000},
    {type: "car", valuation: 10000}
  ]},
  etc...
]
于 2012-08-16T22:49:19.303 に答える
1

次のように記録を整理する方が簡単ではないでしょうか。

@people = [
    {:name => 'Bill Smith', :state => 'KS', :assets => [
        {:type => 'house', :valuation => 150000},
        {:type => 'car', :valuation => 10000}
    ]}, 
    {:name => 'Bubba Jack', :state => 'FL', :assets => [
        {:type => 'boat', :valuation => 12000}
    ]}
]

次に、「render :json => @people」を使用します。

{[ "name": 'Bill Smith', "state": 'KS', "assets": [
    {"type": 'house', "valuation": 150000},
    {"type": 'car', "valuation": 10000},
],
[ "name": 'Bubba Jack', "state": 'FL', "assets": [
    {"type": 'boat', "valuation": 12000}
]}

次に、値にそのままアクセスします。

'Bill Smith' = people[0]["name"]
'house'      = people[0]["assets"][0]["type"]
于 2012-08-16T22:59:13.750 に答える