首页 > 解决方案 > 将行值绑定到 odata 模型 SAP UI5

问题描述

我有一个包含 2 列的表 - 用户可以在其中输入要返回的值,而另一列是复选框。如果用户在项目行中输入一个值,我会选中该复选框。如果值大于 0,则仅选中复选框。我的问题是下面的代码,如果我在第三行输入一个值,则该复选框被选中,但即使第一行的复选框也被选中。我认为问题出在 stmt:tableModel.setProperty("/ItemSet/results/0/ReturnItemFlag", "X"); 因为我给“0”第一行也得到了价值。如何指向正确的结果编号。 控制器.js

qtyChange: function(oEvent) {

            var a = oEvent.getSource();
            var input = a.getValue()
            var row = oEvent.getSource().getParent().getParent();
            var index = row.getIndex();

            var oTable = vc.getView().byId("takeStockHistoryDetailTable");
            var selectedRowPath = oTable.getContextByIndex(index).getPath();
            var tableModel = vc.getView().getModel(TAKE_STOCK_ORDER_DETAIL);
            var selectedPart = tableModel.getObject(selectedRowPath);
            var QtyOnHand = selectedPart.QtyOnHand;
            var UnitP = selectedPart.UnitPrice;

            var f = parseInt(input);
            var g = parseInt(QtyOnHand);
            var h = parseFloat(UnitP);

            if (f > g) {

                sap.m.MessageToast.show("Return quantity is more than available quantity");
                a.setValue("");

            } else if (f === 0 || input === "") {
                selectedPart.ReturnItemFlag = 'Y';
                tableModel.setProperty("/ItemSet/results/0/ReturnItemFlag", "Y");

            } else {

                selectedPart.ReturnItemFlag = 'X';
                selectedPart.QtyToReturn = input;

                var sub = input * h;
                // debugger;
                var sub1 = sub.toString();
                selectedPart.Subtotal = sub1;

                tableModel.setProperty("/ItemSet/results/0/ReturnItemFlag", "X");
                tableModel.setProperty("/ItemSet/results/0/Subtotal", sub1);
            }

        },

标签: odatasapui5

解决方案


这可能是处理表格项的一种非常复杂的方式。

以下是您应该如何使用 bindingContexts。

on listItemPress 表的事件(列表)

qtyChange: function(oEvent){
    
    var oColumnListItem = oEvent.getSource().getParent();
    var sPath = oColumnListItem.getBindingContextPath("yourModelName");

OR 
    var sPath = oColumnListItem.getBindingContext("yourModelName").getPath();

    var sReturnItemFlagPath = sPath + "/ReturnItemFlag";

    tableModel.setProperty(sReturnItemFlagPath,"newValue");

}

让我知道这是否有帮助!


推荐阅读