0

モデルの への呼び出し後にサーバーの応答をカスタマイズするにはどうすればよいfetch()ですか?

私が尋ねる理由は、モデルに複数の子モデルがある状況を扱っているからです。サーバーから返されたデータは、子モデル間で分割する必要があります。

例:

// A call to "fetch()" on this model needs to split up the returned data
//     between the two child models. Once this happens, their 'change'
//     events should fire and update their respective views.
var ParentModel = Backbone.Model.extend({
    initialize: function(){
        this.childModel_01 = new ChildModel_01({}); 
        this.childModel_02 = new ChildModel_02({});
    }
})

var ChildModel_01 = Backbone.Model.extend({});
var ChildModel_02 = Backbone.Model.extend({});

本当にありがとう!

4

3 に答える 3

2

2 つのモデルを別のモデルの下にネストされた属性にする特定の理由がない限り、Backbone.sync直接呼び出して、サーバーにアクセスするための別の関数を用意する方が良いオプションかもしれません。

私のアプリケーションでは、通常、/bootstrap一度に複数のモデル/コレクションに対してこれを行うエンドポイントがあります。あなたの場合、次のようになります。

var ChildModel_01 = Backbone.Model.extend({});
var ChildModel_02 = Backbone.Model.extend({});

var childModel_01 = new ChildModel_01({}); 
var childModel_02 = new ChildModel_02({});

Backbone.sync('read', {}, {
  url : '/bootstrap',
  success : function(resp, status, xhr) {
    childModel_01.set(resp.child_01)
    childModel_02.set(resp.child_02)
  },
  error : function() {
    // Deal with error here 
  }
});

サーバーからの JSON 応答は次のようになります。

{
   "child_01": {
     "attr" : "val",
     "attr2" : "val2"
   },
   "child_02": {
     "attr" : "val",
     "attr2" : "val2"
   }
}

それらをモデルに含める必要がある場合は、モデルのparse()関数を調べて、サーバーの応答をより適切に処理してください。

于 2012-07-20T20:54:24.047 に答える
1

サーバー応答と JSON のモデルへのマップとの間の橋渡しとなる解析関数があります。サーバーの応答をカスタマイズするには、これを使用する必要があります。

http://backbonejs.org/#Model-parse

于 2012-07-20T21:05:09.703 に答える
0

バックボーンは安らかなサービスであるため、これを行うための RESTful な方法は、応答が戻ってきたときに、子リソースを取得するための URL を持っています。

したがって、応答は次のようになります。

{
   attr1: 'value1',
   attr2: 'value2',
   childModelURLS: {
     childModel1URL: 'http://your.server.com/path/to/child/resource',
     childModel2URL: 'http://your.server.com/path/to/child/resource',
     childModel3URL: 'http://your.server.com/path/to/child/resource'
   }
}
于 2012-07-20T19:33:01.713 に答える