绑定模型更改时 VizFrame 不更新

VizFrame doesn't update when the bound model changes

我有一个 sap.viz.ui5.controls.VizFrame,在我看来,它的 data 属性 绑定到双向 JSON 模型。此外,我在同一视图中有一个 Button 和一个 Text 元素。 Text 元素显示模型的值,它与 VizFrame 绑定,Button 有一个 press 事件处理程序,它增加一个 属性 的模型。

因此,当我按下按钮时,Text 会自动更新,这与 VizFrame 不同。你对如何解决这个问题有什么建议吗?我看到 this vizUpdate method,但它看起来很复杂,可能有点矫枉过正。但是,更改整个模型也会更改 VizFrame.

的显示数据

代码示例

Main.view.xml

<mvc:View controllerName="demo.chart.controller.Main" xmlns:mvc="sap.ui.core.mvc" displayBlock="true" xmlns="sap.m"
    xmlns:viz="sap.viz.ui5.controls" xmlns:viz.data="sap.viz.ui5.data" xmlns:viz.feeds="sap.viz.ui5.controls.common.feeds">
    <Shell id="shell">
        <App id="app">
            <pages>
                <Page id="page" title="{i18n>title}">
                    <content>
                        <VBox>
                            <viz:VizFrame id="vizFrame" uiConfig="{applicationSet:'fiori'}" vizType='donut'>
                                <viz:dataset>
                                    <viz.data:FlattenedDataset data="{data>/}">
                                        <viz.data:dimensions>
                                            <viz.data:DimensionDefinition name="Type" value="{manipulatedData>type}"/>
                                        </viz.data:dimensions>
                                        <viz.data:measures>
                                            <viz.data:MeasureDefinition name="Amount" value="{manipulatedData>amount}"/>
                                        </viz.data:measures>
                                    </viz.data:FlattenedDataset>
                                </viz:dataset>
                                <viz:feeds>
                                    <viz.feeds:FeedItem uid="color" type="Dimension" values="Type"/>
                                    <viz.feeds:FeedItem uid="size" type="Measure" values="Amount"/>
                                </viz:feeds>
                            </viz:VizFrame>
                            <Button text="+1 Foo" press="onButtonPress"/>
                            <Text text="Foo: {data>/0/amount} | Bar: {data>/1/amount}"/>
                        </VBox>
                    </content>
                </Page>
            </pages>
        </App>
    </Shell>
</mvc:View>

Main.controller.js

sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "sap/ui/model/json/JSONModel"
], function (Controller, JSONModel) {
    "use strict";

    return Controller.extend("demo.chart.controller.Main", {
        onInit: function () {
            this.mData = new JSONModel([{
                type: "foo",
                amount: 23
            }, {
                type: "bar",
                amount: 20
            }]).setDefaultBindingMode("TwoWay");
            this.getView().setModel(this.mData, "data");
        },

        onButtonPress() {
            this.mData.setProperty("/0/amount", this.mData.getProperty("/0/amount") + 1);
        }
    });
});

我想我明白了。更改模型后必须将数据重新绑定到数据集聚合:

工作示例

Main.controller.js

sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "sap/ui/model/json/JSONModel"
], function (Controller, JSONModel) {
    "use strict";

    return Controller.extend("demo.chart.controller.Main", {
        onInit: function () {
            this.mData = new JSONModel([{
                type: "foo",
                amount: 23
            }, {
                type: "bar",
                amount: 20
            }]).setDefaultBindingMode("TwoWay");
            this.getView().setModel(this.mData, "data");
        },

        onButtonPress() {
            this.mData.setProperty("/0/amount", this.mData.getProperty("/0/amount") + 1);
            this.byId("vizFrame").getDataset().bindData({
                path: "data>/"
            });
        }
    });
});