为什么在清单中定义模型而不反映控件所做的更改

时间:2019-08-08 10:19:17

标签: odata sapui5 sap-fiori

我通过应用程序中的清单文件进行了模型设置。

Manifes.json

应用程序基本上是FlexibleColumnLayout,其中两个列分别用于“主视图”和“详细视图”。

MasterView具有sap.m.Table,其表项绑定到来自ConsumablesMod的“ / RequiremnetSet”实体集。

Master.view.xml

在表项上单击,在Detail.controller.js中,我将单击的项路径绑定到Detail.View.xml

    // When the route is reached bind context to controls in Details view
        _onRequirementMatched: function (oEvent) {

            this._requirement = oEvent.getParameter("arguments").requirement || this._requirement || "0";
            this._itemPath =  "/" + this._requirement;

            if(this._requirement){
                this.getView().bindElement({
                    path: this._itemPath,
                    model: "consumablesMod"
                });
            }
        }

Detail.controller首先将加载显示片段以显示实体,然后在按下“编辑”按钮时将加载编辑片段,以便用户可以更改实体的某些属性。

EditRequirement.fragment.xml的绑定:

EditRequirementFragment

我遇到的问题是编辑实体并反映对模型的更改。例如,当用户使用嵌套在Detail.view.xml中的EditRequirementFragment中的Selection控件更改“ Product”时,“ ProductId”绑定将在Master.View.xml的表中自动更新。没关系,这是我对TwoWay绑定的期望。当Selection更改时,不会更新Master.view.xml绑定中的“ ProductTxt”,但我认为这也可以,Selection只是监视键,我需要在“ / RequirementSet”中手动为此实体更新文本。

// Handle SAVE Requirement chages 
        handleUpdateRequirement: function (){

            // Get Consumables model and from it RequirementSet Entity which is about to be updated
            // this._itemPath = "/RequirementSet('RequirementId')"
            var oConsumablesModel = this.getOwnerComponent().getConsumablesModel();
            var oEntity = oConsumablesModel.getProperty(this._itemPath);

            // Update text attributes of Requirement entity from Product and Status master data entities
            oEntity.ProductTxt = oConsumablesModel.getProperty("/ProductSet('" + oEntity.ProductId + "')").ProductTxt;
            oEntity.StatusId = oConsumablesModel.getProperty("/ReqStatusSet('" + oEntity.StatusId + "')").StatusTxt;

            //oConsumablesModel.setProperty(this._itemPath, oEntity);

            // Update model
            oConsumablesModel.update(this._itemPath, oEntity, {

                success : function(oData, oResponse){
                    sap.m.MessageToast.show("Requirement successfully updated!");
                },
                error : function(oResponse) {
                    sap.m.MessageToast.show("Requirement update failed! (" + oResponse.statusText + ")" );
                }
            });
        }

由于这不会更新Master.view.xml表中的“ ProductTxt”绑定,因此我进行了一些调试,上述功能发生了什么:

Debug Save action

在屏幕截图中,用户将产品从产品1->产品10更改了。我试图弄清楚为什么未在模型本身的对应路径(oConsumablesModel)中更新“ ProductId”,但在我要从同一模型中获取的对象(oEntity),引用相同的路径,并且在主视图中的表中?我是否需要直接从表控件中获取模型并使用它?

最后,什么是更新模型中特定实体的属性值并在UI中反映这些更改的正确方法。

非常感谢, Mijodrag

0 个答案:

没有答案