Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在SAPUI5/OpenUI5中更新JSON模型_Javascript_Json_Odata_Sapui5 - Fatal编程技术网

Javascript 在SAPUI5/OpenUI5中更新JSON模型

Javascript 在SAPUI5/OpenUI5中更新JSON模型,javascript,json,odata,sapui5,Javascript,Json,Odata,Sapui5,我有一个json模型,model/salesOrder.json { "HeaderSet" : [] } 初始化 var SalesOrderModel = new sap.ui.model.json.JSONModel("model/SalesOrder.json"); sap.ui.getCore().setModel(SalesOrderModel, "SOModel"); 在创建销售订单时,创建一个具有直接键的对象,如FirstName、LatName等,并在没有任何键的情况下

我有一个json模型,model/salesOrder.json

{
  "HeaderSet" : []
}
初始化

var SalesOrderModel = new sap.ui.model.json.JSONModel("model/SalesOrder.json");
sap.ui.getCore().setModel(SalesOrderModel, "SOModel");
在创建
销售订单
时,创建一个具有直接键的对象,如
FirstName
LatName
等,并在没有任何键的情况下推送到该
标题集
数组

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>
现在,我可以使用这个上下文直接绑定细节页面中的其他细节

<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>

在这个详细信息页面中,我有一个按钮,它将读取此上下文并以可编辑的形式填充。在这里,我需要在模型的正确对象中更新这个特定的编辑项。 我尝试为每个对象添加一个唯一的动态键,但那时我的绑定无法工作

这里和

几乎是同一个线程,您有一个客户机模型(JSON),希望用来自可编辑表单的对象的更新版本替换HeaderSet数组的元素。我们在这里假设您不希望直接将双向绑定返回到JSON模型,因为您希望首先进行输入验证

您有一个唯一的键SalesOrderID,我们可以看到您在发布到事件总线时已经在使用它。假设它存储在currentSalesOrderID中,并使用它在数组中找到要用新数据替换的正确对象,在一个我们称为UpdateOrder的对象中:

// 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);

不太确定你在问什么,但在我看来,这更像是一个JavaScript问题,而不是一个sapui5问题,对吗?换句话说,您是在问如何在数组中找到要更新的适当对象吗?@qmacro是的,没错。
// 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);