主干.js 更新与添加视图

Posted

技术标签:

【中文标题】主干.js 更新与添加视图【英文标题】:backbone.js update vs add in view 【发布时间】:2012-01-24 20:49:18 【问题描述】:

我已经使用带有success 回调的常规save 保存和更新我的模型。

但我试图弄清楚如何根据模型是新模型还是对现有模型的更新来定义单独的add 视图。

这不是服务器端。我的服务器创建/更新工作正常,我试图弄清楚更新视图的“正确”方法是什么。

我的代码很简单

Myapp.FormInput = Backbone.Views.extend( 初始化:函数()... , 提交表单:函数() 如果(this.id===未定义) // 这是一个新模型,所以创建它 model.set(new Myapp.Model.set(Myapp.Models.Helpers.serialize_objects(form))); model.set(parent_id:parent.id); 别的 // 这是对现有模型的更新,所以只需更新模型 model.set(Myapp.Model.set(Myapp.Models.Helpers.serialize_objects(form))); model.url+='/'+this.id; 模型.保存(模型, 成功:函数(模型) Myapp.Collection.add(model); ,错误:函数() alert('创建或更新错误'); ); );

【问题讨论】:

【参考方案1】:

如果我正在编辑,我喜欢用“模型”从路由器初始化“视图”,如果我从头开始创建新的“模型”,则没有“模型”。 这个想法是:

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

然后,在“渲染”方法中,检查此视图实例中的模型。

但是.. 这仅在您的应用程序使用不同的路径来编辑和创建模型时才有效。也许您正在以最复杂的方式在同一条路线上做所有事情(或者您有其他原因)。

你可以试试这样的:

在视图中定义 model.save 'success' 函数(即,与在示例中定义 submit_form 的方式相同)并添加代码行,将模型与此视图相关联:

successSaving : function( model )
    Myapp.Collection.add( model );
    this.model = model;  //here you save the model in your view.

为了使其工作,您必须将视图绑定到您的新成功函数(这就是您在外部定义它的原因)。 您可以像这样在视图初始化函数中创建它(有关“_bind”here 的更多信息):

_.bindAll(this, 'successSaving');

现在,在您的“渲染”方法中,您可以渲染表单,然后检查“this.model”是否为“未定义”,如果不是,您现在知道必须填写内容。

免责声明:我没有检查代码,所以复制粘贴可能不起作用,但希望你能明白。

【讨论】:

谢谢罗伯特,我最终做了类似于你昨天在这里所说的事情。我现在这样做的方式是在模型上使用绑定方法。一个用于保存,一个用于更新。成功实际上最终是空的。我认为你的方式很长,所以我给了你胜利!

以上是关于主干.js 更新与添加视图的主要内容,如果未能解决你的问题,请参考以下文章

Backbone.js - 在视图处于活动状态时添加 keydown 事件?

简单的主干 js 视图不起作用

如何使用模型/集合获取 4 个 JSON (API) 响应到主干.js 中的一个视图

backbone.js - 模板不会在asp.net视图上呈现

带有 Marionette 视图的主干模式 - 子视图事件没有被触发

主干和引导日期选择器