克隆 sapUi5 json 模型并停止绑定

Clone sapUi5 json model and stop binding

我看到过类似的问题,但在我的情况下它不起作用。 我有一个 JSON 模型,称为数据,它对应于带有组合框的 SAPUi5 表单。我想在第一次打开我的应用程序时复制模型的状态并保持原样。之后我想用它来重置我的表单并将组合框恢复为默认值。 当我第一次启动我的应用程序时:

this.getView().setModel(new JSONModel(data)); //create the original model

//copy the original model (copyModel is global variable
copyModel = $.extend({}, data); 

到这里一切都很好。这两个模型是完全一样的。之后我有一个按钮和一个重置功能:

resetP: function(){

     this.getView().setModel(new JSONModel(copyModel));
     console.log(copyModel);
     }

我第一次 select 组合框中的内容并单击重置按钮和 运行 重置功能时,复制模型是正确的。与原始数据模型相同。当我再次更改 combobx 的 selected 值时,copyModel 开始采用 selected 值。不知何故它被覆盖了。我不知道我做错了什么。有什么建议吗?我也尝试使用 JSON.strignify 而不是 extend.

JSON 模型默认有两种绑定方式。因此,当您在 ComboBox 上触发诸如 selectionChange 之类的事件时,由于双向绑定,模型的设置数据会不断更新。 Javascript 也有对象的引用,所以更新的是原始的 copyModel 对象。

您可以通过将 copyModel 的副本设置为 JSON 模型来防止这种情况发生。

还有一点我想提一下,就是不要一直重复设置模型。 您可以只更新设置到模型的数据并更新模型。 这可以通过两种方式完成。

一个。

resetP: function(){
                this.getView().getModel().setData(copyModel);
                console.log(copyModel);
            }

b。您还可以更新所需的 属性 并执行

this.getView().getModel().updateBindings();

我们以这种方式使用 jQuery.extend(true, {}, object_to_copy); 从我们想要一个独立副本的对象创建一个 "deep copy"。