如何使用骨干解析嵌套的json?

时间:2014-01-14 01:37:07

标签: javascript ruby-on-rails json backbone.js underscore.js

我尝试了一些与类似问题相关的解决方案,但仍然没有运气。除了嵌套(下面)之外,json结构并不复杂。

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

我的目标是在erb文件中访问“city”和“state”,如下所示。

<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('city')并得到('state'),不知道如何处理它。非常感谢提示。

1 个答案:

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

将更改address属性而不会触发任何更改事件。因此,通常情况下更好:

  • 具有平面模型结构(上面的解析方法就是一个例子)
  • 复制对象值以进行修改或返回(使用_.clone或其他内容)