首页 > 解决方案 > 在 sap.m.table 中添加和编辑项目

问题描述

我有个问题。我将 oData 服务绑定到此表,它具有功能(添加、编辑、保存和取消)。

在此处输入图像描述

因此,我可以通过单击 + 按钮添加新行,这将触发 onAddViewTaskItem()(下面提供的代码)。

在此处输入图像描述

所以我为新项目输入了新的描述和子描述。但是,如果我编辑任何当前项目(不是新创建的项目),它将updateItems()ListBase调用updateAggregation.

在我调试时,它会使用当前的绑定上下文进行更新(我看到上下文中只有 3 个项目而不是 4 个)。似乎当我addItem到表时,它不会将新创建的上下文添加到表的绑定上下文中。

无论如何要更新绑定上下文?

onAddViewTaskItem: function(oEvent) {
    this.getModel("viewSettings").setProperty("/visible", true);
    this.getModel("viewSettings").setProperty("/editable", true);
    this._createAddRow();
  },
  _createAddRow: function() {
    var _oContext = this._createTaskItemContext();
    this._addTableRow(_oContext);
  },
  _createTaskItemContext: function(oEvent) {
    return this.getModel("xsodata").createEntry("/TaskItems", {
      properties: {
        "TaskItemID": this._generateGuid(),
        "YearID": this._oScheduleDetailDialog.getBindingContext("xsodata").getObject().YearID,
        "TaskDescription": "",
        "TaskSubDescription": "",
        "DeleteFlag": ""
      },
      success: function(oEvent) {}.bind(this),
      error: function(oEvent) {}.bind(this)
    });
  },
  _addTableRow: function(oContext) {
    var oScheduleTaskItem = this._createRowControls();
    this.getView().addDependent(oScheduleTaskItem);
    oScheduleTaskItem.setBindingContext(oContext, "xsodata");
    this.byId("tblScheduleItems").addItem(oScheduleTaskItem);
  },
  _createRowControls: function(oComboBoxControl) {
    return new ColumnListItem({
      cells: [
        this._createInputControl("viewSettings>/editable", "i18n>description", "xsodata>TaskDescription"),
        this._createInputControl("viewSettings>/editable", "i18n>subDescription", "xsodata>TaskSubDescription"),
        this._createCheckboxControl("viewSettings>/editable", "xsodata>DeleteFlag")
      ]
    });
  },
  _createInputControl: function(sEditable, sPlaceholder, sBindingProperty) {
    var _oInputControl = new Input({
      maxLength: 255,
      editable: "{" + sEditable + "}",
      placeholder: "{" + sPlaceholder + "}",
      value: "{" + sBindingProperty + "}"
    });
    return _oInputControl;
  },
  _createCheckboxControl: function(sEditable, sBindingProperty) {
    var _oCheckBoxControl = new CheckBox({
      editable: "{" + sEditable + "}",
      selected: "{= ${" + sBindingProperty + "} === 'X' ? true : false}",
      select: this.handleDeleteFlagSelect
    });
    return _oCheckBoxControl;
  },
  handleDeleteFlagSelect: function(oEvent) {
    var bSelected = oEvent.getParameter("selected");
    var sPath = oEvent.getSource().getBindingContext("xsodata").getPath();
    this.getModel("xsodata").setProperty(sPath + "/DeleteFlag", bSelected ? "X" : "");
  }, 

标签: javascriptodatasapui5

解决方案


推荐阅读