2013-01-17 43 views
1

在Backbone.js的覆蓋的解析,我用它包裝在metadata哈希響應的API工作。例如:Backbone.js的模型:自定義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; 
} 

然而,當我取的收集posts = new App.Collections.Posts(); posts.fetch(),後屬性都是空的。即posts.at(0).get('title') = undefined。現在

,當Model解析更改爲這個固定:

parse: function (response) { 
    return response; 
} 

但這意味着post.fetch()壞了。 有什麼建議嗎?

謝謝!

+0

你試過做的console.log(響應),看看有什麼響應對象包含? –

回答

7

我認爲問題在於,您的型號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

+0

工作完美!謝謝! – user868711

+0

真棒!我一直在想跆拳道發生在我的數據解析。謝謝。 – rkstar

+0

我把它和我發現的另一篇文章合併在一起。嘗試 'parse:function(response){if(_.isObject(response.data)){ return response.data; } return response; }' – rkstar