【问题标题】:Backbone.js model: overwriting parse for custom APIBackbone.js 模型:覆盖自定义 API 的解析
【发布时间】:2012-12-31 13:59:38
【问题描述】:

在 Backbone.js 中,我正在使用一个 API,它将响应包装在 metadata 哈希中。例如:

# GET /api/posts/1
meta: {
  status: 200
},
data: {
  id: 1
  title: 'Hello World'
}

# GET /api/posts
meta: {
  status: 200
},
data: [
  {
    id: 1
    title: 'Hello World'
  },
  { 
    id: 2
    title: 'Hi everyone!'
  }
]

我的 Backbone.js 集合/模型覆盖了以下解析函数:

# App.Models.Post
... 
parse: function (response) {
   this.meta = response.meta;
   return response.data;
}

# App.Collections.Posts
... 
parse: function (response) {
   this.meta = response.meta;
   return response.data;
}

但是,当我在集合posts = new App.Collections.Posts(); posts.fetch() 上获取时,帖子属性都是空的。 IE。 posts.at(0).get('title') = undefined.

现在,当模型解析更改为:

parse: function (response) {
   return response;
}

但这意味着post.fetch() 已损坏。 有什么建议吗?

谢谢!

【问题讨论】:

  • 您是否尝试过执行 console.log(response) 来查看响应对象包含的内容?

标签: backbone.js


【解决方案1】:

我认为问题在于您的模型parse 在通过模型fetch 与集合fetch 完成时传入的数据不一致。 console.log 模型parse 的参数来确认这一点。这是因为集合的parse 返回的值只是一个对象数据数组,要将它们转换为模型,集合只是委托给模型的parse 方法。这可能会解决您的问题:

//App.Models.Post
parse: function (response) {
    if (response.data) {
        return response.data;
    }
    return response;
}

供参考:https://github.com/documentcloud/backbone/pull/773

【讨论】:

  • 太棒了!我一直想知道 wtf 发生在我的数据解析中。谢谢。
  • 我将此与我找到的另一篇文章合并在一起。试试parse : function( response ){ if( _.isObject(response.data) ){ return response.data; } return response; }
  • 花了几个小时弄清楚如何显示 this.collection.models。我将此添加到我的收藏中。工作。
猜你喜欢
  • 1970-01-01
  • 2016-01-16
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多