从树表中编辑对象

问题描述 投票:1回答:1

我对SAPUI5中的树表有疑问。这是我的JSFiddle:(https://jsfiddle.net/vazOrt/5L6e97wj/11/

我在最后一个节点中有衣服。我想在输入字段的更改功能中将属性“更改”更改为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}

但是我找不到从树表到模型对象的任何解决方案。有谁知道我如何更新对象的属性?

谢谢

javascript arrays model sapui5 treetable
1个回答
0
投票

我找到了一种方法来更新该嵌套数组中更改的对象的实际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, '.$1'); // 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/

我希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.