2014-01-14 70 views
0

我嘗試了一些與類似問題有關的解決方案,但仍然沒有運氣。除了嵌套(下面),json結構不是非常複雜。如何使用骨幹分析嵌套的JSON?

{ "name" : "John Smith", 
    "gender" : "male", 
    "address" : { "city" : "New York", 
       "state" : "NY" 
       } 
} 

我的目標是在erb文件中訪問下面的「城市」和「狀態」。

<script id="person-template" type="text/template"> 
    <div class="person"> 
    <span class="name"><%%= get('name') %></span> 
    <span class="gender"><%%= get('gender') %></span> 
    <span class="city"><%%= get('city') %></span> 
    <span class="state"><%%= get('state') %></span> 
    </div> 
</script> 

現在我卡住的GET(「城市」)和get(「狀態」),不知道如何處理它。非常感謝提示。

回答

0

在您的模型定義中,您希望覆蓋解析方法以根據需要返回數據。

var YourModel = Backbone.Model.extend({ 
    parse: function(data){ 
    return { 
     name: data.name, 
     gender: data.gender, 
     city: data.address.city, 
     state: data.address.state 
    }; 
    } 
}); 

如果你是從json明確設置模型值,那麼你有一個稍微不同的問題。您可以檢索模型的地址部分和訪問它的直接性:

person.get('address').city // this should contain the city value 

警告:

,如果你這樣做,那麼您檢索address對象將是可變的,因此:

person.get('address')。city =「Denver」

將更改地址屬性而不觸發任何更改事件。出於這個原因,它通常是更好的任一:

  • 具有平坦的模型結構(上面的解析方法是這樣一個例子)
  • 修改或返回複製對象值(使用_.clone或東西)
+0

我會試試看。謝謝。 – user180574

+0

按照您的建議嘗試獲得('city'),但它不起作用。但如果我得到('地址'),它顯示'[object Object]'。有什麼辦法可以從地址進一步檢索城市嗎? – user180574

+0

您不應該得到具有地址屬性的模型。也許如果你發佈了更多的代碼,我可以提供更好的幫助。 – Gabriel