如何处理绑定单个实体与 OData 模型
How to handle binding single entity with OData model
假设我想要一个文本输入,用户可以在其中键入产品 ID,然后按 Enter 键将产品数据加载到视图中。我只想一次加载/查看一个产品。
我为我的文本输入设置了一个事件处理程序,它获取输入的产品 ID,然后调用 odata 模型的 read
方法:
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(){}
});
},
这成功地将数据加载到模型中。但是,模型是 "keyed"(因为缺少更好的术语)/Products('1')
,这意味着要访问数据,您必须知道产品 ID。
问题
在哪里存储当前产品 ID,以便后续视图知道如何访问加载的产品名称?
我目前定义了一个单独的 JSON 模型,用于存储活动产品 ID。在我随后的视图 onBeforeRendering
中,我正在读取那个有效的产品 ID,然后创建一个新的上下文,但这似乎不正确。
var context = new sap.ui.model.Context(myModel, "/Products(1)");
this.getView().setBindingContext(context, "products");
取决于你想做什么。
标准:您有一个 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){
...
}
});
假设我想要一个文本输入,用户可以在其中键入产品 ID,然后按 Enter 键将产品数据加载到视图中。我只想一次加载/查看一个产品。
我为我的文本输入设置了一个事件处理程序,它获取输入的产品 ID,然后调用 odata 模型的 read
方法:
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(){}
});
},
这成功地将数据加载到模型中。但是,模型是 "keyed"(因为缺少更好的术语)/Products('1')
,这意味着要访问数据,您必须知道产品 ID。
问题
在哪里存储当前产品 ID,以便后续视图知道如何访问加载的产品名称?
我目前定义了一个单独的 JSON 模型,用于存储活动产品 ID。在我随后的视图 onBeforeRendering
中,我正在读取那个有效的产品 ID,然后创建一个新的上下文,但这似乎不正确。
var context = new sap.ui.model.Context(myModel, "/Products(1)");
this.getView().setBindingContext(context, "products");
取决于你想做什么。
标准:您有一个 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){
...
}
});