温馨提示:本文翻译自stackoverflow.com,查看原文请点击:sapui5 - How to handle binding single entity with OData model
odata sapui5

sapui5 - 如何使用OData模型处理绑定单个实体

发布于 2020-04-18 12:39:14

假设我想输入一个文本输入,用户可以在其中输入产品ID,然后按Enter键将产品数据加载到视图中。我只想一次加载/查看一个产品。

我为我的文本输入设置了一个事件处理程序,该事件处理程序输入了产品ID,然后调用read了odata模型方法:

onSubmit: function(){
    var prodID = sap.ui.getCore().byId("product_id").getValue();
    oData.read("/Products('" + prodID + "')", {
        success: function(){
            console.log(oData.getProperty("/Products('1')/Name")); // Outputs the product name
        },
        error: function(){}
    });
},

这样可以成功将数据加载到模型中。但是,由于/Products('1')要访问数据,您必须知道产品ID ,因此该模型是“锁定的”(因为缺乏更好的术语)

我在哪里存储当前产品ID,以便后续视图知道如何访问已加载的产品名称?

目前,我在存储活动产品ID的地方定义了一个单独的JSON模型。在我的后续视图中onBeforeRendering,我正在读取该活动产品ID,然后创建一个新的上下文,但这似乎不正确。

var context = new sap.ui.model.Context(myModel, "/Products(1)");
this.getView().setBindingContext(context, "products");

查看更多

提问者
Paul Wieland
被浏览
63
Marc 2020-02-05 20:45

取决于您要做什么。

标准:您有一个XML视图。您想要在XML视图中的某个位置显示产品名称。

最简单的方法是将视图绑定到特定产品:

onSubmit: function() {
    ...
    // assuming oData is a variable which holds your model
    var sKey = oData.createKey("/Products", {
        Id: prodID // Assuming Id is the name of your key property
    });
    this.getView().bindElement({
        path: sKey,
        model: "myModelName" // if your model has no name, remove this line
    });
}

然后,您可以在视图中访问产品名称:

<Text text="{myModelName>Name}" />

将模型绑定到视图之后,您始终可以使用以下代码访问代码中的数据(和路径) oView.getBindingContext("myModelName");


如果您不想显示数据,但要进行一些计算:成功回调有两个参数。第一个包含数据。

oData.read(sKey, {
    success: function(oResult){
        ...
    }
 });