javascript - 如何使用数据绑定(bind)将数据动态加载到 sapui5 表和条形图

标签 javascript sapui5

我的html

<body class="sapUiBody" role="application">
    <div id="content"></div>
    <div id="content1"></div>
    <div id="content2"></div>

</body>

我的Js

    var myData= {
            user:[{id:"1",firstname:"x",lastname:"k"},
                  {id:"2",firstname:"y",lastname:"k"},
                  {id:"3",firstname:"z",lastname:"k"}],
            expense:[{expenseno:"1",uid:"1",item:"c",amount:"1500"},
                     {expenseno:"2",uid:"2",item:"t",amount:"1150"},
                     {expenseno:"3",uid:"3",item:"p",amount:"500"},
                     {expenseno:"4",uid:"1",item:"y",amount:"1000"},
                     {expenseno:"5",uid:"2",item:"t",amount:"3500"},
                     {expenseno:"6",uid:"3",item:"s",amount:"3500"},
                     {expenseno:"7",uid:"1",item:"q",amount:"900"}],

    };
    var oModel = new sap.ui.model.json.JSONModel();
    oModel.setData(myData);
    sap.ui.getCore().setModel(oModel);
    // user table
    var oTable = new sap.ui.table.DataTable({
        title : "Users",
        width : "100%",
        visibleRowCount : 3,
        selectionMode : sap.ui.table.SelectionMode.Single,
        editable : false
    });
    oTable.addColumn(new sap.ui.table.Column({
        label: new sap.ui.commons.Label({text: "User ID"}),
        template: new sap.ui.commons.TextField({value:"{id}"})
    }));
    oTable.addColumn(new sap.ui.table.Column({
        label: new sap.ui.commons.Label({text: "First Name"}),
        template: new sap.ui.commons.TextField({value:"{firstname}"})
    }));
    oTable.addColumn(new sap.ui.table.Column({
        label: new sap.ui.commons.Label({text: "Last Name"}),
        template: new sap.ui.commons.TextField({value:"{lastname}"})
    }));
    oTable.bindRows("/user");
    oTable.placeAt("content");


    // expense table
    var oTable2 = new sap.ui.table.DataTable({
        title : "Expense",
        width : "100%",
        visibleRowCount : 5,
        selectionMode : sap.ui.table.SelectionMode.Single,
        editable : false
    });

    oTable2.addColumn(new sap.ui.table.Column({
        label: new sap.ui.commons.Label({text: "User Id"}),
        template: new sap.ui.commons.TextField({value:"{uid}"})
    }));

    oTable2.addColumn(new sap.ui.table.Column({
        label: new sap.ui.commons.Label({text: "Expense No"}),
        template: new sap.ui.commons.TextField({value:"{expenseno}"})
    }));

    oTable2.addColumn(new sap.ui.table.Column({
        label: new sap.ui.commons.Label({text: "Items"}),
        template: new sap.ui.commons.TextField({value:"{item}"})
    }));

    oTable2.addColumn(new sap.ui.table.Column({
        label: new sap.ui.commons.Label({text: "Amount"}),
        template: new sap.ui.commons.TextField({value:"{amount}"})
    }));
    oTable2.bindRows("/expense");
    oTable2.placeAt("content1");

    // bar graph
    var dataset = new sap.viz.ui5.data.FlattenedDataset({
        dimensions : [ {
            axis : 1,
            name :"Item",
            value : "{item}"
        }],

        measures : [ {
            name :"Amount",
            value : "{amount}"
        } ],

        data : {
            path : "/expense",
            //filters : how to filter on the basis of row selected on first table,
        }
    });

    var column = new sap.viz.ui5.Column({
        width : "95%",
        height : "400px",
        showLegend : false,
        plotArea : {
        //'colorPalette' : d3.scale.category20().range()
        },
        title : {
            visible : true,
            text : "Item vs Amount"
        },
        dataset : dataset
    });
    column.placeAt("content2");


    oTable.attachRowSelect(function(oEvent){
        // get the binding context of the first selected row
        var selectedRowContext = oEvent.getParameter("rowContext");
        var selectedUserId = oModel.getProperty("id", selectedRowContext);

            // filter expenses
            var listBinding = oTable2.getBinding();
            var oFilter = new sap.ui.model.Filter("uid", sap.ui.model.FilterOperator.EQ, selectedUserId);
            listBinding.filter([oFilter]);

            // how to filter graph                  
    });

到目前为止我做了什么:

  • 创建了两张表格和一张条形图。如果我从我的中选择一行 第一个表(用户),第二个表(费用)在此基础上更新 已选择用户 ID。[使用 AttachRowSelect(function(oEvent)- 代码帮助 来自 sapui5.netweaver.ondemand.com]

现在我想根据第一个表中选择的用户 ID 来更新条形图。假设我选择第 1 行(用户 ID 1),则条形图应仅显示费用数据集中与用户 ID 1 相关的项目和金额。

谢谢,请帮忙。

最佳答案

虽然我没有完全得到你的要求。根据您的理解,以下内容可能对您有所帮助。

        var datasetBinding = dataset.getBinding("data");
        var oFilter2 = new sap.ui.model.Filter("uid", sap.ui.model.FilterOperator.EQ, selectedUserId);
        datasetBinding.filter([oFilter2]);

关于javascript - 如何使用数据绑定(bind)将数据动态加载到 sapui5 表和条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32057646/

相关文章:

javascript - javascript 的开窗器关闭问题

javascript - 如何将动态对象添加到javascript对象属性

javascript - 如何更有效地使用Ember中的适配器、序列化器、模型等工具?

javascript - 在 Javascript 中,字符串文字是对象吗?

javascript - NightwatchJs 在控制台、属性和值中打印元素文本时出现问题

sapui5 - 过滤超过一列

sapui5 - TooltipBaseRenderer.js : 404 - NOT FOUND

sapui5 - 如何防止选择早于另一个输入中的日期?

javascript - SAPUI5自定义控件渲染器方法中的调用函数

javascript - SAPUi5 单选按钮选定的文本