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

这可能是一个更好的选择,除非您有特定原因使两个模型嵌套在另一个模型下的属性,否则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 服务,因此 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 回答