Backbone.js - 自定义从" fetch()"返回的数据的组织。

时间:2012-07-20 19:14:48

标签: javascript backbone.js backbone-relational

在调用模型的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({});

非常感谢!

3 个答案:

答案 0 :(得分: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()函数,以便更好地处理服务器响应。

答案 1 :(得分:1)

有一个解析函数,它是服务器响应和模型中JSON映射之间的桥梁。您必须使用它来自定义服务器响应:

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

答案 2 :(得分: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'
   }
}