主干 - 获取后不解析集合中的每个模型
Backbone - not parse each model in collection after fetch
如何防止集合获取中模型的解析函数?
$(function() {
var Task = Backbone.Model.extend({
url : function() {
return this.urlRoot + this.id;
},
urlRoot: 'index.php?c=light&a=list_tasks_bb&ajax=true&task=',
parse: function (response, options) {
console.log(options);
console.log(response);
return response;
}
});
var TaskList = Backbone.Collection.extend({
model: Task,
url: 'index.php?c=light&a=list_tasks_bb&ajax=true',
initialize: function () {
},
parse: function (response, options) {
return response.tasks;
}
});
var Light = Backbone.Router.extend({
el: $('#light'),
routes: {
"tasks/:id": "taskAction",
"*page": "defaultAction",
},
initialize: function () {
_this = this;
this.tasks = new TaskList();
this.users = new UserList();
},
taskAction: function(id) {
this.task = new Task({id: id});
$.when (
this.task.fetch()
).then(function(zzz) {
new TaskView({model: _this.task}).render();
});
},
defaultAction: function(page) {
$.when (
this.tasks.fetch(),
this.users.fetch()
).then (function() {
new TaskListView({collection: _this.tasks}).render();
});
}
});
});
我有一个模型和一个集合,我通过 ajax fetch 获得。我没有机会更改后端,因此任务列表的 json 结构为:
"contents": {},
"current": false,
"errorCode": 0,
"errorMessage": "",
"u": 4,
"tasks": [{
"id": "12250",
"t": "ZZZ",
"cid": "24",
"c": "2013-08-22 11:36:32",
"dd": "02.09.2013",
"sd": "02.09.2013",
"pr": "300",
"pid": "0",
"atid": "1:4",
"s": 0,
"dl": ""
}, {
"id": "12307",
"t": "ZZZ",
"cid": "42",
"c": "2013-08-28 11:14:44",
"dd": "05.09.2013",
"sd": "28.08.2013",
"pr": "200",
"pid": "0",
"atid": "1:4",
"s": 0,
"dl": ""
}, {
"id": "12326",
"t": "ZZZ",
"cid": "2",
"c": "2013-08-29 09:55:34",
"dd": "31.08.2013",
"sd": "29.08.2013",
"pr": "200",
"pid": "0",
"atid": "1:4",
"s": 0,
"dl": ""
}],
"events": []
这就是我使用解析进行收集的原因。在这一步中,一切都很好。单个任务的 JSON 结构为:
"contents": {},
"current": false,
"errorCode": 0,
"errorMessage": "",
"u": 4,
"tasks": [{
"id": "12250",
"t": "ZZZZ",
"cid": "24",
"c": "2013-08-22 11:36:32",
"dd": "02.09.2013",
"sd": "02.09.2013",
"pr": "300",
"pid": "0",
"atid": "1:4",
"text": "XXXXX",
"s": 0,
"dl": ""
}],
"comments": [{
"id": "48178",
"text": "CCCC",
"cid": "4",
"con": "23.08.2013"
}],
"events": []
所以我需要再次解析"task.fetch()"之后的单个任务。在模型中添加解析函数后,它工作正常,直到我开始获取收集,因为在收集解析之后,我已经有了正确的模型数据,但模型解析回调再次为每个模型。
我是否有正确的方法来解决此问题,或者更好的方法是尝试更改后端?
附言当然,我可以做这样的事情:
if(response.tasks) {
return response.tasks[0];
} else {
return response;
}
但我认为这不是正确的解决方案。
创建要插入集合的模型时,Backbone 将未来的集合作为选项传递给模型构造函数,模型构造函数又将此选项转发给parse
。您可以检查此属性并根据需要中止解析:
var Task = Backbone.Model.extend({
parse : function(response, options){
if (options.collection) return response;
return response.tasks[0];
}
});
var TaskList = Backbone.Collection.extend({
model: Task,
parse : function(response){
return response.tasks;
}
});
还有一个演示 http://jsfiddle.net/nikoshr/dfMgR/
相关文章:
- 将多级 mongodb 文档转换为 Backbone.js 模型/集合
- 主干:如何保存模型集合中模型的属性更改
- 我应该何时/为什么从 BackboneJS 模型/集合扩展函数返回
- 主干 + 木偶 - 模型/集合的内存管理最佳实践
- 为什么预期的路线不使用帆.js蓝图 API 将项目添加到模型集合
- 主干模型/集合中的Javascript范围界定问题
- 使用Knockback.js过滤中的视图模型集合
- 正在清除主干模型/集合内存泄漏
- 主干集合和模型url,批量模型集合保存
- 如何从asp.net mvc将模型集合注入backbone.js
- JavaScript:Backbone.js获取json并将其加载到模型集合中
- 如何为我的所有BackboneJS模型/集合REST调用添加一个基本URL
- 我如何检测一个对象是一个水线模型或模型集合在Sails.js
- 在嵌套的骨干(木偶)模型/集合中冒泡事件
- 骨干关系——深度嵌套模型/集合
- 如何在主干视图中加载模型集合
- 类似骨干模型/集合的React库
- 从React组件更新模型/集合
- 主干监听嵌套模型/集合
- BackboneJS模型/集合urlRoot/URL的意义