请帮帮我:)
我有骨干模型:
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但我不喜欢它。
答案 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));