Parsing 主干模型解析方法(集合/服务器)

Parsing 主干模型解析方法(集合/服务器),parsing,backbone.js,collections,Parsing,Backbone.js,Collections,请帮帮我:) 我有主干模型: var people = Backbone.Model.extend({ ... parse : function() { return response } }) 并收集: var group = Backbone.Collection.extend({ model: people ... }) var group = Backbone.Collection.extend({ model: _PeopleBase ... parse : function

请帮帮我:)

我有主干模型:

var people = Backbone.Model.extend({
...
parse : function() {

  return response
}
})
并收集:

var group = Backbone.Collection.extend({
model: people
...
})
var group = Backbone.Collection.extend({
model: _PeopleBase
...
parse : function() { //Collection parser


  return response
}

})
通常我通过调用collectionsync方法获取数据,但有时我调用modelfetch方法

我的后端返回答案的格式为:

{code: 0, data: {'1': {name: 'alex'}, '2': {name: 'max'}}}
问题: 如果我为处理我的后端应答编写modelparse方法-收集同步不工作(因为服务器应答有另一种格式),如果我为收集编写parse方法-不工作后端处理

如何创建通用处理


我找到了方法,查看parse方法中的选项并使用else/if,但我不喜欢它

选项一:

使用额外的PeopleBase类会有帮助吗

var _PeopleBase = Backbone.Model.extend({
    ...
})
var people = _PeopleBase.extend({
...
parse : function() {

  return response
}
})
收藏:

var group = Backbone.Collection.extend({
model: people
...
})
var group = Backbone.Collection.extend({
model: _PeopleBase
...
parse : function() { //Collection parser


  return response
}

})
选项2: 如果可能的话,您可以依靠返回的数据来决定如何解析它

parse : function(response, options) { 
  //Test the response with whichever way you can definitely differentiate them

  return response
}
选项3: 根据谁是parse函数的调用方:

parse : function(response, options) { 
    if (this instanceof People) {

    } else {

    }

  return response
}

希望这有帮助

我在我的视图中是这样做的(我有很多嵌套数据,必须将现有对象映射到我的视图,以确保在不完全刷新的情况下更新我的视图):

//如果Person也有需要解析的嵌套数据,则传递{parse:true}

parse: function(response, xhr) {
                for(var key in this) {
                    if (key === 'person') {
                        var embeddedClass,
                            embeddedData = response[key], 
                            exsiting = this.get(key);

                       if (existing == null) {

                            embeddedClass = new Person(embeddedData, {parse: true}); 
                       } else {
                            existing.set(key, existing.parse(embeddedData));
                            embeddedClass = existing
                       } 
                       response[key] = embeddedClass;
                    }
                }
                return response;
            }
然后,当新数据出现时,我需要再次手动解析它,我调用

this.set(this.parse(response));

因此,模型URL发回并接受通常的JSON,但集合的URL发回
{code:0,数据:{'1':{name:'alex'},'2':{name:'max'}}}}
,您需要将后者转换为某种数组?是的,我希望跨集合使用模型,和模型获取方法。重写以重做数据有什么错?我重写了collection#parse,该规则用于解析传入的集合数据,但我在集合属性“model:people”(设置集合模型格式)中进行了设置,当我为每个调用模型#parse的条目获取集合时,你的模型#parse被调用了还是没有被调用?你想要还是需要它被调用?它也是变体,但我不喜欢:)