1

Backbone.js では、応答metadataハッシュでラップする 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

現在、モデル解析が次のように変更されると、これは修正されます。

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 に答える