【问题标题】:Clone sapUi5 json model and stop binding克隆 sapUi5 json 模型并停止绑定
【发布时间】:2019-03-04 13:59:19
【问题描述】:

我看到了一个类似的问题,但在我的情况下它不起作用。 我有一个名为 data 的 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 是正确的。与原始数据模型相同。当我再次更改组合框的选定值时,copyModel 开始采用选定的值。不知何故,它被覆盖了。我不知道我做错了什么。有什么建议吗?我也尝试使用 JSON.strignify 而不是扩展。

【问题讨论】:

    标签: javascript json binding sapui5 model-binding


    【解决方案1】:

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

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

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

    一个。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-15
        • 2018-04-24
        • 2022-08-09
        • 2012-10-19
        相关资源
        最近更新 更多