【问题标题】:How to use backbone parse nested json? [duplicate]如何使用主干解析嵌套的 json? [复制]
【发布时间】:2014-01-14 01:37:07
【问题描述】:

我尝试了一些与类似问题相关的解决方案,但仍然没有运气。 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('city') 和 get('state') 上,不知道如何处理。非常感谢您的提示。

【问题讨论】:

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


    【解决方案1】:

    在您的模型定义中,您希望覆盖 parse 方法以根据需要返回数据。

    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 = "丹佛"

    将更改地址属性而不触发任何更改事件。因此,通常最好:

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

    【讨论】:

    • 我会试试的。谢谢。
    • 我按照您的建议尝试 get('city') ,但它不起作用。但是如果我确实得到('address'),它会显示'[object Object]'。有什么办法可以进一步从地址检索城市?
    • 你不应该最终得到一个具有地址属性的模型。也许如果您发布更多代码,我可以提供更好的帮助。
    猜你喜欢
    • 1970-01-01
    • 2016-10-22
    • 2014-12-21
    • 2018-07-12
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2019-10-06
    相关资源
    最近更新 更多