View backbone.js更新与加载项视图
我使用常规的View backbone.js更新与加载项视图,view,model,backbone.js,View,Model,Backbone.js,我使用常规的save和success回调来保存和更新模型 但我正试图找出如何定义一个单独的add视图,这取决于模型是新的还是对现有模型的更新 这不是服务器端。我让服务器创建/更新工作正常,我正在尝试找出更新视图的“正确”方法 我的代码很简单 Myapp.FormInput = Backbone.Views.extend({ initialize: function(){... }, submit_form: function(){ if(this.id===undefin
save
和success
回调来保存和更新模型
但我正试图找出如何定义一个单独的add
视图,这取决于模型是新的还是对现有模型的更新
这不是服务器端。我让服务器创建/更新工作正常,我正在尝试找出更新视图的“正确”方法
我的代码很简单
Myapp.FormInput = Backbone.Views.extend({
initialize: function(){...
},
submit_form: function(){
if(this.id===undefined){
// this is a new model, so create it
model.set(new Myapp.Model.set(Myapp.Models.Helpers.serialize_objects(form)));
model.set({parent_id:parent.id});
} else {
// this is an update to an existing model, so just update the model
model.set(Myapp.Model.set(Myapp.Models.Helpers.serialize_objects(form)));
model.url+='/'+this.id;
}
model.save(model,
{success: function(model){
Myapp.Collection.add(model);
}, error: function(){
alert('error creating or updating');
}}
});
});
Myapp.FormInput=Backbone.Views.extend({
初始化:函数(){。。。
},
提交表单:函数(){
if(this.id==未定义){
//这是一个新模型,所以创建它
set(新的Myapp.model.set(Myapp.Models.Helpers.serialize_对象(表单));
set({parent\u id:parent.id});
}否则{
//这是对现有模型的更新,因此只需更新模型即可
model.set(Myapp.model.set(Myapp.Models.Helpers.serialize_对象(表单));
model.url+='/'+this.id;
}
model.save(model,
{成功:功能(模型){
Myapp.Collection.add(模型);
},错误:函数(){
警报(“创建或更新错误”);
}}
});
});
如果我正在编辑,我喜欢使用“模型”从路由器初始化“视图”,如果我从头开始创建新的“模型”,则不使用“模型”。 其想法是:
var Workspace = Backbone.Router.extend({
routes: { '/collection/:id' : 'edit_model',
'/collection/newObject' : 'new_model
},
new_model : function(){
myView = new A_View();
},
edit_model : function(){
myView = new A_View({model:aModel});
}
});
然后,在“render”方法中,检查此视图实例中的模型
但是。。这仅在应用程序使用不同的路径编辑和创建模型时有效。也许你正在以一种最精细的方式在同一条路线上做每件事(或者你有其他原因)
您可以尝试以下方法:
定义您的模型。在视图中保存“success”函数(即,与您在示例中定义提交表单的方式相同),并在其中添加代码行,将模型与此视图关联:
successSaving : function( model ){
Myapp.Collection.add( model );
this.model = model; //here you save the model in your view.
}
为了使其工作,您必须将视图绑定到新的success函数(这就是您在外部定义它的原因)。
您可以在view initialize函数中这样做(有关“\u bind”的更多信息):
现在,在“render”方法中,您可以呈现表单,然后检查“this.model
”是否为“未定义”,如果不是,您现在知道必须填充内容
免责声明:我没有检查代码,所以可能复制粘贴不起作用,但希望您能理解。如果我正在编辑,我想用“模型”从路由器初始化“视图”,如果我从头开始创建新的“模型”,则不用“模型”。
其想法是:
var Workspace = Backbone.Router.extend({
routes: { '/collection/:id' : 'edit_model',
'/collection/newObject' : 'new_model
},
new_model : function(){
myView = new A_View();
},
edit_model : function(){
myView = new A_View({model:aModel});
}
});
然后,在“render”方法中,检查此视图实例中的模型
但是。。这仅在应用程序使用不同的路径编辑和创建模型时有效。也许你正在以一种最精细的方式在同一条路线上做每件事(或者你有其他原因)
您可以尝试以下方法:
定义您的模型。在视图中保存“success”函数(即,与您在示例中定义提交表单的方式相同),并在其中添加代码行,将模型与此视图关联:
successSaving : function( model ){
Myapp.Collection.add( model );
this.model = model; //here you save the model in your view.
}
为了使其工作,您必须将视图绑定到新的success函数(这就是您在外部定义它的原因)。
您可以在view initialize函数中这样做(有关“\u bind”的更多信息):
现在,在“render”方法中,您可以呈现表单,然后检查“this.model
”是否为“未定义”,如果不是,您现在知道必须填充内容
免责声明:我还没有检查代码,所以复制粘贴可能不起作用,但希望您能理解。谢谢Robert,我最后做了一些类似于您昨天在这里所说的事情。我现在的做法是在模型上使用bind方法。一个用于保存,一个用于更新。成功的结果实际上是空的。我认为你的方式是一个很长的路要说,所以我给了你胜利!谢谢你,罗伯特,我最后做了一些和你昨天在这里说的相似的事情。我现在的做法是在模型上使用bind方法。一个用于保存,一个用于更新。成功的结果实际上是空的。我认为你的方式是一个很长的路要说,所以我给了你胜利!