1

在 Backbone.js 中,我正在使用将响应包装在 ametadatahash 中的 API。例如:

# 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;
}

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

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

parse: function (response) {
   return response;
}

但这意味着它post.fetch()被打破了。有什么建议么?

谢谢!

4

1 回答 1

7

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

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

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

于 2013-01-17T05:57:59.353 回答