我有一个json模型,model/salesOrder.json,
{
"HeaderSet" : []
}
初始化,
var SalesOrderModel = new sap.ui.model.json.JSONModel("model/SalesOrder.json");
sap.ui.getCore().setModel(SalesOrderModel, "SOModel");
在创建Sales Order
时,创建一个具有直接关键字(如FirstName
、LatName
等(的对象。并且在没有任何键的情况下推送到该CCD_ 4阵列。
var salesOrderModel = this.getView().getModel("SOModel");
var salesOrderData = salesOrderModel.getData();
salesOrderData.HeaderSet.push(SoObject);
salesOrderModel.setData(salesOrderData);
假设我在这个模型中有3个对象,我需要更新这个模型中的一个特定对象?我该怎么做?
母版页视图,
<List id="listMyOrder" growing="true" growingThreshold="10" growingScrollToLoad="true" noDataText="No drafts found" mode="SingleSelectMaster" items="{path : 'SOModel>/HeaderSet' }" select="handleMyOrderSelect">
<ObjectListItem title="{SOModel>PurchaseOrderNumber}">
<attributes>
<ObjectAttribute text="Due Date : {path : 'SOModel>PurchaseOrderDate' }" />
</attributes>
</ObjectListItem>
</List>
主页控制器,
handleMyOrderSelect: function (evt) {
this._showDetail(evt.getParameter("listItem"));
},
_showDetail: function (item) {
_salesOrderIDForCart = item.getBindingContext("SOModel").getObject().SalesOrderID
sap.ui.getCore().getEventBus().publish("nav", "to", {
id: "SoDetail",
data: {
source: "MyOrders",
SalesOrderID: item.getBindingContext("SOModel").getObject().SalesOrderID,
context: item.getBindingContext("SOModel")
}
});
}
现在,我可以使用这个上下文直接绑定细节页面中的其他细节,
<List showSeparators="None" id="tblSummary">
<InputListItem label="PO Number">
<Label text="{SOModel>PurchaseOrderNumber}" design="Bold"/>
</InputListItem>
<InputListItem label="PO Date">
<Label text="{path : 'SOModel>PurchaseOrderDate'}" design="Bold"/>
</InputListItem>
</List>
在这个详细信息页面中,我有一个按钮,它将读取这个上下文并以可编辑的形式填充。在这里,我需要在模型的正确对象中更新这个特定的编辑项。我尝试为每个对象添加一个唯一的动态键,但那时我的绑定将不起作用。
这里几乎是同一根线http://scn.sap.com/thread/3464458和http://scn.sap.com/thread/3386927
您有一个客户端模型(JSON(,并希望用来自可编辑表单的对象的更新版本替换HeaderSet数组的元素。我们在这里假设您不希望直接双向绑定回JSON模型,因为您希望首先进行输入验证。
您有一个唯一的密钥SalesOrderID,当您发布到事件总线上时,我们可以看到您已经在使用该密钥。让我们假设它存储在currentSalesOrderID中,并使用它在数组中找到要用新数据替换的正确对象,在一个我们称之为updatedOrder:的对象中
// Get the data from the model
var salesOrderData = salesOrderModel.getData();
// Find the index of the object via the SalesOrderID
var index = salesOrderData.HeaderSet
.map(function(order) { return order.SalesOrderID; })
.indexOf(currentSalesOrderID);
// Replace the order in the array
salesOrderData.HeaderSet.splice(index, 1, updatedOrder);