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

时间:2013-08-12 04:03:24

标签: parsing backbone.js collections

请帮帮我:)

我有骨干模型:

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

  return response
}
})

收藏:

var group = Backbone.Collection.extend({
model: people
...
})

通常我通过调用集合同步方法获取数据,但有时,我称之为模型 fetch 方法。

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

{code: 0, data: {'1': {name: 'alex'}, '2': {name: 'max'}}}

问题: 如果我写模型解析方法来处理我的后端答案 - 集合同步不起作用(因为服务器答案有另一种格式),如果我写解析方法收集 - 不要不工作后端处理。

我如何创建通用处理?

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

2 个答案:

答案 0 :(得分:-1)

方法-1:

是否会使用额外的_PeopleBase类帮助?

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

  return response
}
})

收藏品:

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 : function(response, options) { 
    if (this instanceof People) {

    } else {

    }

  return response
}

希望这有帮助!

答案 1 :(得分:-1)

以下是我在我的工作方式(我有很多嵌套数据,必须将现有对象映射到我的视图,以确保我的视图在没有完全刷新的情况下更新):

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

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));