克隆sapUi5 json模型并停止绑定

时间:2018-09-28 14:32:41

标签: javascript json binding sapui5 model-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);
     }

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

2 个答案:

答案 0 :(得分:1)

JSON模型默认具有两种绑定方式。因此,当您在ComboBox上触发诸如selectionChange之类的事件时,由于两种方式的绑定,模型的设置数据将不断更新。 Javascript还具有通过引用提供的对象,因此将更新原始的copyModel对象。

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

我想提到的另一件事是,不要一次又一次地设置模型。 您可以只更新设置到模型的数据并更新模型。 这可以通过两种方式完成。

a。

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

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

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

答案 1 :(得分:0)

我们以这种方式使用jQuery.extend(true, {}, object_to_copy);从想要独立副本的对象创建“深层副本”。