javascript - 更新 SAPUI5/OpenUI5 中的 JSON 模型

标签 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");

在创建销售订单时,创建一个具有直接键的对象,例如FirstNameLatName等。并在没有任何键的情况下推送到此 HeaderSet 数组。

var salesOrderModel = this.getView().getModel("SOModel");
var salesOrderData = salesOrderModel.getData();
salesOrderData.HeaderSet.push(SoObject);
salesOrderModel.setData(salesOrderData);

假设我这个模型中有3个对象,我需要更新这个模型中的特定对象吗?我怎样才能做到这一点?

母版页 View ,

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

母版页 Controller ,

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")
        }
    });
}

现在,我可以使用此上下文直接绑定(bind)详细信息页面中的其他详细信息,

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

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

这里几乎相同的线程http://scn.sap.com/thread/3464458http://scn.sap.com/thread/3386927

最佳答案

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

您有一个唯一的 key SalesOrderID,我们可以看到您在发布到事件总线时已在使用该 key 。假设它存储在 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/OpenUI5 中的 JSON 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24097072/

相关文章:

javascript - 始终执行 Backbone 中的父函数

java - 如何使用名称为 "dot"的 json simple 创建 json 对象?

javascript - Angularjs 不会从外部 json 文件中读取

c# - 将 >48k 发送到 WCF 数据服务 (OData) 413 错误

javascript - typescript + RequireJs + AngularJs

iPhone CPU 使用率上的 Javascript SVG 动画

php - 用双引号 PHP 给出数组值

.net - 是否有一种通用方法来检查 Linq 提供程序(尤其是 OData)是否支持某个属性定义?

javascript - variableName[0] 有更好的写法吗?