我有一个工作流程的骨干设置。在任何给定时间,页面上都可以看到多个工作流程/模型。如果尚未启动工作流(即不在数据库中),则它将显示为新模型。将获取的模型传递给视图时遇到问题。我只传递属性而不是它看起来的集合?有人有什么想法吗?
当我从数据库中获取所有工作流时,它会返回工作流进度的JSON数组。
[{
"ref_id": 41959,
"parent_ref_id": 35,
"fk_workflow_id": 2,
"stage": 1,
"status_max": 4,
"updated": "2012-05-14 17:30:46"
}, {
"ref_id": 41960,
"parent_ref_id": 35,
"fk_workflow_id": 3,
"stage": 3,
"status_max": 4,
"updated": "2012-05-14 12:30:48"
}]
加载页面后,所有工作流程都会创建为“新模型”,因为我们不知道它们是否已经启动。一旦fetch返回已经启动的模型,我就必须将适当的模型传递给视图。我无法弄清楚如何正确传递模型(即我可以传递属性,但似乎在那之后,我无法访问collection.create函数等?)
var self = this;
this.workflows = new Workflow.WorkflowCollection();
this.workflows.fetch({
data:{
ref_id: REF_ID
},
success: function(model, response) {
for(var i = 0, ln = model.models.length; i< ln;i++) {
self.switchWorkflow(model.models[i].get("fk_workflow_id"), new Workflow(model.models[i].attributes));
}
}
});
这是我能够计算骨干知道需要设置多少模型的唯一方法(没有为每个客户启动每个工作流程 - 约100万行)
setupWorkflowSpaces: function(model) {
for(var i =0; i<Workflow.FileWorkflows.length;i++) {
this.switchWorkflow(Workflow.FileWorkflows[i], false);
}
},
switchWorkflow: function(workflow_id, model) {
if(!model)
model = new Workflow;
switch(workflow_id) {
case 1:
this.applicationProcessView(model);
break;
case 2:
this.kitView(model);
break;
case 3:
this.posView(model);
break;
default:
alert('wut');
break;
}
},
kitView: function(model) {
console.log(model);
model.set("fk_workflow_id", 2);
if(this.kit) this.kit.close();
this.kit = new Workflow.PostageView({
model: model
});
},
答案 0 :(得分:0)
尝试在Backbone Collection中定义model
属性:
var Workflow.WorkflowCollection = Backbone.Collection.extend({
model: Workflow
});
如果已定义,从服务器返回的原始属性将转换为Workflow
模型。
然后,您不必遍历通过success
中的fetch
回调返回的集合。所有添加的模型都将出现在您的收藏中,您可以使用.create()
方法继续添加更多模型。
获取后,您可以使用WorflowCollection.each
遍历更新的集合。在循环中,您可以运行switch语句将每个模型分配给适当的视图。
我希望这会有所帮助。