簡體   English   中英

在UI5中編輯/更新綁定的數據時未發生數據綁定

[英]Data binding not happening when the binded data is edited/updated in UI5

我有一個包含克隆按鈕的主從頁面。 單擊克隆按鈕后,第一個列表項的數據被放入模型(detailModel-在component.js中聲明),並打開一個新屏幕。 該列表項的數據綁定到某些輸入字段。 當該輸入字段中的任何一個被更新/擦除后,用戶又導航而不保存它並再次出現在該頁面上時,該更新/擦除的字段將保持空白。 我希望這些數據進入較早出現的那個字段,但現在為空白。 我模型中的數據也沒有改變。 下面是代碼:

Component.js:

this.detailModel = new sap.ui.model.json.JSONModel();
        this.detailModel.setDefaultBindingMode(sap.ui.model.BindingMode.OneWay);
            sap.ui.getCore().setModel(this.detailModel, "detailModel");

Controller.js:

        /*eslint-disable no-console, no-alert */
    sap.ui.define([
        "sap/ui/core/mvc/Controller",
        "sap/ui/model/json/JSONModel",
        "hmel/TravelandGuestHouse/controller/formatter",
        "sap/m/MessageToast",
        "sap/m/MessageBox",
        "sap/m/Button",
        "sap/m/Dialog",
        "sap/m/Text",
        'sap/m/Label',
        'sap/m/TextArea'
    ], function (Controller, JSONModel, formatter, MessageToast, MessageBox, Button, Dialog, Text, Label, TextArea) {
        "use strict";
        return Controller.extend("hmel.TravelandGuestHouse.controller.CloneTravelRequest", {

            onInit: function () {
                this.router = sap.ui.core.UIComponent.getRouterFor(this);
                //for cloning request
                this.detailModel = sap.ui.getCore().getModel("detailModel");
                this.getView().setModel(this.detailModel, "detailModel");
                //for sending data to guest house screen
                this.getView().byId("date").setDateValue(new Date());
                this.router.attachRoutePatternMatched(this._handleRouteMatched, this);
            },

            _handleRouteMatched: function (evt) {
                if (evt.getParameter("name") !== "CloneTravelRequest") {
                    return;
                }

                this.getView().invalidate();

                    var that = this;

                //fetching Train Names
                $.ajax({
                    url: "/Non_sap_create_requests/odata/TravelPrpTrainDetails",
                    method: "GET",
                    dataType: "json",
                    success: function (data) {
                        that.getView().getModel("Model").setProperty("/TravelPrpTrainDetails", data.value);
                        var tempModel = that.getView().getModel("detailModel");
                        var train = tempModel.getData().TrainName;
                        var trainKey = formatter.pickTrainKeyFromModel(data.value, train);
                        that.getView().byId("trainName").setSelectedKey(trainKey);
                        that.setLocations();
                        var nameofPass = tempModel.getData().NameOfPsngr;
                        if (nameofPass === "" || nameofPass === null) {
                            that.getView().byId("nameOfP").setValue(tempModel.getData().Requestee);
                        }
                    },
                    error: function (err) {
                        console.log(err.message);

                    }
                });

                var fdate = new Date();
                this.getView().byId("date").setDateValue(new Date());
                this.getView().byId("date").setMinDate(fdate);
            }



        });
    });

如果可以更改為oDataModel ,則可以使用resetChanges方法。

如果不能的話,您將不得不手動進行一些操作。 一旦彈出新窗口,保存數據,用戶將更改,如果取消,則將保存的數據恢復到jsonDataModel上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM