【问题标题】:How can I check on already created entries in my model?如何检查模型中已创建的条目?
【发布时间】:2020-07-29 23:28:46
【问题描述】:

我对sapui5比较陌生,无法解决以下问题。

我有一个 SplitApp。 当我在主视图中选择第一个条目时,将调用详细视图。在详细视图的 onInit 事件中,方法 createEntry 运行。为了处理我的输入数据,我调用了 submitChanges。

现在,当我在主视图上调用第二个条目时,会调用另一个视图,并且对于该第二个视图,onInit 事件会运行并创建一个自己的条目。但是从方法 createEntry 的第一个视图中创建的条目不会被删除。 现在我调用我的主视图上的第一个条目,并且 onInit 事件再次运行,并且将为第一个视图创建第二个 ID。当我运行 submitChanges 方法时,这会导致错误。 我在视图之间切换的次数越多,我创建的条目就越多。

那么有没有可以用来调用 deleteCreatedEntry 的事件?我已经尝试过 onExit 和 onBeforeHide。 或者最好检查一下是否已经创建了条目?我必须为此使用哪个代码?

this.oContext = this.getModel().createEntry("/MyoData01Set", {
                success: this._successSave.bind(this),
                error: this._errorSave.bind(this)
            });

非常感谢和最好的问候 朱莉娅

另外 13.05.20:

我实施了该建议,但仍然无法正常工作。当我尝试输入方法 _this.bindNewContext(); 时出现错误 请看代码:

handleMatchedDetail: function (oEvent) {
            this.getModel().metadataLoaded().then(function () {
                this.getModel().resetChanges().then(function () {
                    this._bindNewContext();
                });
            }.bind(this));
        },

        _bindNewContext: function () {
            this.oContext = this.getModel().createEntry("/Kardex01Set", {
                success: this._successSave.bind(this),
                error: this._errorSave.bind(this)
            });
            // }
            var oBindingPath = {
                path: this.oContext.getPath(),
                events: {
                    change: function () {
                        this.getModel().read("/Kardex01Set('0')", {
                            success: function (oData, oResponse) {
                                this.getView().getModel().setProperty(this.oContext.getPath() + "/tanum", oData.tanum);
                            }.bind(this)
                        });
                    }.bind(this)
                }
            };
            this.getView().bindObject(oBindingPath);
        },

【问题讨论】:

    标签: javascript sapui5


    【解决方案1】:

    您只需在您的模型上调用resetChanges。这将删除所有尚未提交的更改。

    详情请参阅API description

    【讨论】:

    • 非常感谢。我真的很感谢你的回答。但是当我在 createEntry 方法之前调用它时,没有任何变化。我想我以错误的方式调用了 resetChanges 方法。 ``` this.getModel().resetChanges(); this.oContext = this.getModel().createEntry("/MyoData01Set", { 成功:this._successSave.bind(this),错误:this._errorSave.bind(this) }); ``` 调试器仍然向我显示所有创建的条目:this.getModel().oData; MyoData01Set('id-1587111506114-11'): {...} MyoData01Set('060'): {__metadata: {...}, ...} MyoData02Set('id-1587111533879-18'): {...} BR, Julia
    • resetChanges() 是异步的,它返回一个 Promise。您应该等待 Promise 解决,如下所示:this.getModel().resetChanges().then(function() {/*remaining code here*/});
    • 嗨,非常感谢,但它在我的编码中不起作用。一定还有什么错误。由于缺少调用该方法的事件,我在创建新条目之前调用了它。抱歉我是个菜鸟 :( 我做了以下测试:handleMatchedDetail: function (oEvent) { this.getModel().metadataLoaded().then(function () { this._resetChanges(); this._bindNewContext(); }.bind(this)); 和:``` _resetChanges: function () { this.getModel().resetChanges().then(function() { sap.m. MessageToast.show("resetChanges"); }); }, ``` 问候朱莉娅
    • 您可以致电this.getModel().getPendingChanges()查看未提交的更改。在调用resetChanges 之前和之后调用它,看看会发生什么。
    • 非常感谢@Marc 和@Johann!我在正确实施该方法时遇到了一些问题,但现在它似乎可以工作了!我怎样才能在这里奖励你的答案?最好的问候
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多