我对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}
但是我找不到从树表到模型对象的任何解决方案。有谁知道我如何更新对象的属性?
谢谢
我找到了一种方法来更新该嵌套数组中更改的对象的实际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/
我希望有帮助!