编辑树的对象 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/
希望对您有所帮助!
我对来自 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/
希望对您有所帮助!