SAPUI5:如何使用 OData 模型将数组或对象绑定到 UI 元素?

SAPUI5: How to bind Arrays or Objects to UI Elements with OData Model?

我想将 SAPUI5 中的 ProcessFlowLaneHeader 绑定到 SAPUI5 中的 OData 模型。文字、位置都可以绑定。

我的问题是我不知道如何将 属性 状态正确绑定到单个 OData 属性。状态 属性 不包括数组或对象,但我想在我的 OData 模型中为状态和值提供不同的属性。

这是在Controller中手动设置Array的固定值的方式

                new sap.suite.ui.commons.ProcessFlowLaneHeader({
                    text: "{ProcessFlowModel>label}",
                    position: "{ProcessFlowModel>position}",
                    state: [ {
                            "state": "Positive",
                            "value": 100                
                        }
                    ]
                })

但我想将 属性 状态的状态和值绑定到 ODataModel,但它不起作用。我的语法是错误的还是这可能?

                new sap.suite.ui.commons.ProcessFlowLaneHeader({
                    text: "{ProcessFlowModel>label}",
                    position: "{ProcessFlowModel>position}",
                    state: [ {
                            "state": "'{ProcessFlowModel>state}'",
                            "value": '{ProcessFlowModel>value}'             
                        }
                    ]
                })

我知道我可以在修改我的 OData 服务后使用多级扩展实体集来完成,因为 SAPUI5 需要嵌套或扩展实体集,但我想用单个属性解决它:

我的 OData 输出看起来像

"state": "Positive",
"value": "50"

不是这样的,据我所知这样还可以

        "state": [
            {
                "state": "Positive",
                "value": 25
            }

所以我的问题也是,如何在不使用多级扩展实体集的情况下在 SAPUI5 中绑定对象或数组?

我从未使用过该控件,但我的回答太长,无法发表评论。根据我对 UI5 的了解,我希望您可以执行以下操作:

创建一个格式化程序,return以控件期望的格式设置对象。

formatProcessFlowLaneHeaderState: function(state, value) {
    return {
        state,
        value
    };
}

然后在你的绑定中使用它

state: "{ parts: ['ProcessFlowModel>state', 'ProcessFlowModel>value'], formatter: '.formatProcessFlowLaneHeaderState' }"

如果您想知道它使用的格式化程序的语法 shorthand property names

此外,如果我对 the docs 的理解正确,您甚至不需要创建对象,但可以 return 具有两个值的数组。那么你甚至不需要格式化程序,但可以使用表达式绑定:

state: "{= [${ProcessFlowModel>state}, ${ProcessFlowModel>value}] }"

我的应用程序没有找到我的格式化程序方法,所以我将它放在绑定中:

                new sap.suite.ui.commons.ProcessFlowLaneHeader({
                    text: "{ProcessFlowModel>label}",
                    position: "{ProcessFlowModel>position}",
                    state: {
                        parts: ['ProcessFlowModel>state', 'ProcessFlowModel>value'],
                        formatter: function (state, value) {
                            return [{ 
                                state: state,
                                value: value
                            }];
                        }
                    }
                })