我正在尝试使用工厂函数将数据绑定到TreeTable。
使用列模板时,一切都按预期工作:http://jsbin.com/givaha/8/edit?html,output
但是用工厂函数替换模板不起作用(空表): http://jsbin.com/givaha/11/edit?html,output
我一直在查看this answer,其中提到了一些用于显示哪些属性是数组的未记录参数,但使用它似乎也没有帮助。
我一直在浏览OpenUI5的源代码,并注意必须在bindRows
does not set the proper parameters之后调用bindAggregation
。
出于某种原因,似乎根本没有调用工厂函数。
我得到templates translate to factory functions automatically这些被正确调用的印象,为什么我的工厂不起作用?
<!DOCTYPE html>
<html>
<head>
<meta name="description" content="TreeTable with Factory">
<script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
id="sap-ui-bootstrap"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-libs="sap.ui.commons,sap.ui.table"
data-sap-ui-bindingSyntax="complex"
data-sap-ui-compatVersion="edge">
</script>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div id="stuff"></div>
<script type="text/javascript">
$(function () {
var data = {
'root': [
{
'label': 'node1',
'children': [
{
'label': 'node1.1'
}
]
},
{
'label': 'node2'
},
{
'label': 'node3'
}
]
};
var model = new sap.ui.model.json.JSONModel();
model.setData(data);
var table = new sap.ui.table.TreeTable({
'columns': [
new sap.ui.table.Column({
'label': 'Column 1'
})
]
});
table.placeAt(stuff);
table.setModel(model);
table.bindRows({
'path': '/root',
'parameters': {
'arrayNames': ['children']
},
'factory': function (id, context) {
console.log(id);
return new sap.ui.table.Row({
'cells': [
new sap.ui.commons.TextView({'text': '{label}'})
]
});
}
});
});
</script>
</body>
</html>
答案 0 :(得分:0)
调试并检查源代码后,我发现&#39; TreeTable&#39;不处理工厂功能。作为聚合行[&#39;是一个TreeBinding,它将覆盖&#39; attachChange(fModelChangeHandler)&#39;。因此它的行为与&#39; ListBinding&#39;不同。例如&#39; items&#39;如果它被传入,将调用工厂函数。