Добавить и редактировать элементы в sap.m.table - PullRequest
1 голос
/ 03 октября 2019

У меня проблема. Я привязываю службу oData к этой таблице, и она имеет функции (Добавить, Изменить, Сохранить и Отменить).

enter image description here

Так что я могу добавить новыйстрок, нажав кнопку +, которая вызовет onAddViewTaskItem() (код приведен ниже).

enter image description here

Поэтому я ввожу новое описание и подописание дляновый предмет. Однако, если я редактирую какие-либо текущие элементы (не новые созданные), он вызовет 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" : "");
  }, 
...