编辑树的对象 table

Editing a object of a tree table

我对来自 SAPUI5 的树 table 有疑问。这是我的 JSFiddle:(https://jsfiddle.net/vazOrt/5L6e97wj/11/)

我在最后一个节点中有服装对象。我想在输入字段的更改功能中,将属性 "change" 更改为 true。 这是对象 {"name": "Red T-shirt", "amount": 16.99, "currency": "USD", "size": "s", "change": false}

如果用户更改输入字段中的大小,我想更新对象 {"name": "Red T-shirt", "amount": 16.99, "currency": "USD", "size": "s", "change": true}

但是我没有找到从树 table 到模型中的对象的任何解决方案。有人知道我如何更新对象的 属性 吗?

谢谢

我找到了一种方法来更新嵌套数组中已更改对象的实际 change 属性。此外,因为您有两种方式的绑定,所以只需按如下方式更新访问的数据。

所以工作 changeState 函数:

changeState: function(e) {
      const view = this.getView();
      const model = view.getModel();
      const data = model.getData();

      const fieldName = e.mParameters.id;
      const elem = e.oSource.oParent.mAggregations.cells.find(function(f) {
        return f.sId === fieldName;
      });            
      const state = elem.oParent._oNodeState;
      const groups = state.groupID.split('/').filter(function(a) { return a !== '' });
      const path = groups[groups.length - 1];
      const fullPath = path.split('_');

      let stringPath = 'catalog.clothing';

      for (let i = 0; i < fullPath.length; i++) {
        stringPath += '[' + fullPath[i] + ']'
      }

      const targetObject = Object.byString(data, stringPath);
      targetObject.change = true;

      console.log('changed', data);
}

您需要添加到您的代码中的附加功能 - 为此致谢 this answer:

Object.byString = function(o, s) {
    s = s.replace(/\[(\w+)\]/g, '.'); // convert indexes to properties
    s = s.replace(/^\./, '');           // strip a leading dot
    var a = s.split('.');
    for (var i = 0, n = a.length; i < n; ++i) {
        var k = a[i];
        if (k in o) {
            o = o[k];
        } else {
            return;
        }
    }
    return o;
}

请在此处找到 JSFiddle:https://jsfiddle.net/Ln31qtor/

希望对您有所帮助!