Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何编辑主干模型并等待保存_Javascript_Backbone.js - Fatal编程技术网

Javascript 如何编辑主干模型并等待保存

Javascript 如何编辑主干模型并等待保存,javascript,backbone.js,Javascript,Backbone.js,我将尽可能简洁地描述这一点。在我正在使用的应用程序中,主干模型会被保存,然后可以在以后进行编辑。目前,我有它的设置,其中的功能是完全动态的 示例:this.model.set('attribute',value) 那里有标准的东西。问题就在这里。客户端希望在用户明确单击“保存并完成”按钮之前不要保存更新的模型 以前,我使用此模式进行编辑: this.model = options.previousModel || new NamedBackboneModel({ id: this.mod

我将尽可能简洁地描述这一点。在我正在使用的应用程序中,主干模型会被保存,然后可以在以后进行编辑。目前,我有它的设置,其中的功能是完全动态的

示例:
this.model.set('attribute',value)

那里有标准的东西。问题就在这里。客户端希望在用户明确单击“保存并完成”按钮之前不要保存更新的模型

以前,我使用此模式进行编辑:

this.model = options.previousModel || new NamedBackboneModel({
    id: this.model.get('id'),
    attr: otherModel.get('attr')
});
我已经将该示例中的属性和模型名称设置为通用名称,但效果非常好。在整个视图中,我会使用
model.set('attr'值)
,它非常完美

在不立即将其保存到上一个模型的情况下,对上一个模型进行编辑的最佳方式是什么

我考虑过使用普通对象来跟踪更改,但我认为必须有一种更好的方法更符合典型的主干模式

当然,我尝试了
newnamedbackbonemodel(options.previousModel.toJSON())
,但因为模型上的嵌套集合没有按预期工作,需要进行一些架构更改


我想在以前的模型上克隆一个会起作用,但我也没有任何运气。谢谢您的帮助,如果需要进一步说明,请告诉我。

我认为您在调用
model.set()时应该传递
{silent:true}

然后,您可以通过调用
model.previousAttributes()
获取所有以前的属性来检索以前的值列表。或
model.previous(“name”)
获取特定属性

当您想放弃以前的属性时,可以调用
model.change()
来调用“change”事件


当您想要保存时,您可以
model.save({silent:false})
这将保存并放弃以前的属性,或者传递
{silent:true}
将保留以前的更改

我最终使用了多种方法来完成这项工作。我在模型中添加了存储和还原功能,如下所示:

store: function() {
    this._storedAttributes = _.clone(this.attributes);
    this._storedCollection = _.clone(this.collection().toJSON());
},

revert: function() {
    if (this._storedAttributes) {
        this.set(this._storedAttributes, {
            silent: true
        });
        this.collection.remove(this.collection.models, { silent: true });
        this.collection.reset(this._storedCollection, { silent: true });

        // For syncing local storage up the chain
        if(!this.isNew()) { this.trigger('change'); }
    }
},

执行model.set('attribute',value)不会将其保存到数据库中,因此,如果用户决定不保存,则始终可以通过执行集合获取来还原旧模型?这在大多数情况下都有效,但对于嵌套集合,它作为自己的对象是自包含的。这就是我要面对的挑战。我正在保存它的一个副本,并将恢复view.remove()函数中的所有内容。谢谢你的贡献。