我通过应用程序中的清单文件进行了模型设置。
应用程序基本上是FlexibleColumnLayout,其中两个列分别用于“主视图”和“详细视图”。
MasterView具有sap.m.Table,其表项绑定到来自ConsumablesMod的“ / RequiremnetSet”实体集。
在表项上单击,在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的绑定:
我遇到的问题是编辑实体并反映对模型的更改。例如,当用户使用嵌套在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”绑定,因此我进行了一些调试,上述功能发生了什么:
在屏幕截图中,用户将产品从产品1->产品10更改了。我试图弄清楚为什么未在模型本身的对应路径(oConsumablesModel)中更新“ ProductId”,但在我要从同一模型中获取的对象(oEntity),引用相同的路径,并且在主视图中的表中?我是否需要直接从表控件中获取模型并使用它?
最后,什么是更新模型中特定实体的属性值并在UI中反映这些更改的正确方法。
非常感谢, Mijodrag