具有工厂函数

时间:2015-12-16 12:25:04

标签: javascript sapui5

我正在尝试使用工厂函数将数据绑定到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>

1 个答案:

答案 0 :(得分:0)

调试并检查源代码后,我发现&#39; TreeTable&#39;不处理工厂功能。作为聚合行[&#39;是一个TreeBinding,它将覆盖&#39; attachChange(fModelChangeHandler)&#39;。因此它的行为与&#39; ListBinding&#39;不同。例如&#39; items&#39;如果它被传入,将调用工厂函数。