【问题标题】:Binding and relationships in OpenUI5OpenUI5 中的绑定和关系
【发布时间】:2015-07-18 01:03:05
【问题描述】:

目前,我正在尝试在 OpenUI5 中构建一个界面,该界面应该允许管理关系。整个应用程序通过 oData 连接到后端。

考虑以下示例:两个实体,“Group”和“Person”。每个组可能由若干人(“成员”)组成。我想做的是在表格中列出所有组 - 对于每个组成员,我想提供一个 MultiComboBox 来选择与组关联的人员,如下所示:

设置视图很容易,但我在绑定方面遇到了一些麻烦。将集合(如“组”)绑定到表并将属性(如“名称”)绑定到项目当然没有问题,但我不知道如何将集合(另一个集合的子集合)绑定到可以说是一个嵌套列表。

我什至根本不知道这是否可能,特别是因为我不仅希望当前隶属于某个组的人员显示在组合框中,而且所有其他人也能够选择它们。当然,我希望对界面所做的更改也适用于模型...

非常感谢任何有关实现所述功能的方法的提示!

【问题讨论】:

    标签: javascript odata sapui5


    【解决方案1】:

    两个不同的模型绑定到表.. 您可以将组和成员作为实体,将导航属性作为成员 you can play around here

    <!DOCTYPE HTML>
    <html>
    	<head>
    		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
    		<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'/>
    		
    		<title>Mobile App in 23 Seconds Example</title>
    		
    		<script  src="https://sapui5.netweaver.ondemand.com/resources/sap-ui-core.js"
    			id="sap-ui-bootstrap"
    			data-sap-ui-libs="sap.m" 
    			data-sap-ui-theme="sap_bluecrystal"></script>
    			<!-- only load the mobile lib "sap.m" and the Blue Crystal theme -->
    		
    		
    		<script type="text/javascript">
    			
    			var sampleData = {
        "Groups": [
            {
                "GroupId": "D1",
                "GroupName": "Developers",
                "Members": []
         },
            {
                "GroupId": "D2",
                "GroupName": "GreenDay",
                "Members": []
         },
            {
                "GroupId": "D3",
                "GroupName": "BackStreet Boys",
                "Members": []
         },
            {
                "GroupId": "D4",
                "GroupName": "Managers",
                "Members": []
         }
         ]
    };
    var oModel = new sap.ui.model.json.JSONModel(sampleData);
    var aData = [
        {
            key: "A",
            text: "John"
        },
        {
            key: "B",
            text: "Sachin"
        },
        {
            key: "C",
            text: "Dravid"
        },
        {
            key: "D",
            text: "David"
        },
        {
            key: "E",
            text: "Sunil"
        },
        {
            key: "F",
            text: "Ronald"
        },
        {
            key: "G",
            text: "Albert"
        }
       ];
    
    var oMulti = new sap.m.MultiComboBox({
        selectionChange: function (oEvent) {
            //change your group data?
        }
    });
    
    oMulti.setModel(new sap.ui.model.json.JSONModel(aData));
    var oTemplate = new sap.ui.core.Item({
        key: "{key}",
        text: "{text}",
        customData: new sap.ui.core.CustomData({
            key: "{GroupId}",
            value: "{GroupName}"
        })
    });
    oMulti.bindItems("/", oTemplate);
    
    //Build Table
    var oTable = new sap.m.Table({
        columns: [
        new sap.m.Column({
                width: "150px",
                header: new sap.m.Label({
                    text: "Group Name"
                })
            }),
        new sap.m.Column({
                header: new sap.m.Label({
                    text: "Members"
                })
            })
       ]
    }).placeAt("content");
    var oTemplate = new sap.m.ColumnListItem({
        cells: [
         new sap.m.Label({
                text: "{GroupName}"
            }),
         oMulti
        ],
        press: function (oEvent) {
            alert(oEvent.getSource().getBindingContext());
        }
    });
    
    oTable.setModel(oModel);
    oTable.bindItems("/Groups", oTemplate);
    			
    		</script>
    		
    	</head>
    	<body class="sapUiBody">
    		<div id="content"></div>
    	</body>
    </html>

    【讨论】:

    • 这看起来很有希望!绑定到 customData 确实是个好主意!我需要一点时间来适应您的方法,因为我的问题实际上比 Group 示例复杂得多。我会尽快让你知道它是否成功了!非常感谢!!!
    • @Toastor 那么,它成功了吗? :) 如果是,你可以接受这个答案,让其他人知道这个问题现在已经解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2018-08-15
    • 2016-06-15
    • 2013-06-29
    • 2010-09-06
    • 1970-01-01
    相关资源
    最近更新 更多