在单个视图中组合用于绑定的不同 OData 路径
Combine different OData paths for bindings in a single view
最好用一个例子来解释我的问题:
观点:
<navContainer>
<page id="first">
<label text="{name}"/>
</page>
<page id="second">
<label text="{car}"/>
</page>
</navContainer>
该模型是一个 OData 服务。对于 'first' 页面,我想使用实体“/EmployeeSet(0)”,对于 'second' 页面,我想使用实体“/CarSet(0)”。
到目前为止我想出了这个技巧,但它对我不起作用:
this.byId("first").bindElement("/EmployeeSet(0)");
this.byId("second").bindElement("/CarSet(0)");
为每个页面设置绑定的正确方法是什么?
这仍然可以使用单个模型吗,所以我不需要在 'text="{secondModel>car}"'?
之类的视图中引用命名模型
更新:
WebIDE 中的自动完成列表未显示 "binding",但这正是我所需要的。有效。
你的代码看起来不错,我猜其他地方有问题。您是否还检查了服务器 returns 数据?您希望从上面列出的视图中看到什么?
无论如何,这里有一个 little jsbin example 我刚刚为您草拟的(见下文)。 binsElement() 其实和视图中的 binding="" 是一样的。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SAPUI5 single file template | nabisoft</title>
<script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
id="sap-ui-bootstrap"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-libs="sap.m"
data-sap-ui-bindingSyntax="complex"
data-sap-ui-compatVersion="edge"
data-sap-ui-preload="async"></script>
<!-- use "sync" or change the code below if you have issues -->
<!-- XMLView -->
<script id="myXmlView" type="ui5/xmlview">
<mvc:View
controllerName="MyController"
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc">
<Panel id="panel1" binding="{/Customers('ALFKI')}">
<Text text="{CompanyName}"/>
</Panel>
<Panel id="panel2" binding="{/Customers('ANATR')}">
<Text text="{CompanyName}"/>
</Panel>
</mvc:View>
</script>
<script>
sap.ui.getCore().attachInit(function () {
"use strict";
//### Controller ###
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/odata/v2/ODataModel"
], function (Controller, ODataModel) {
"use strict";
return Controller.extend("MyController", {
onInit : function () {
this.getView().setModel(
new ODataModel("https://cors-anywhere.herokuapp.com/services.odata.org/V2/Northwind/Northwind.svc/", {
json : true,
useBatch : false
})
);
}
});
});
//### THE APP: place the XMLView somewhere into DOM ###
sap.ui.xmlview({
viewContent : jQuery("#myXmlView").html()
}).placeAt("content");
});
</script>
</head>
<body class="sapUiBody">
<div id="content"></div>
</body>
</html>
这是另一个 jsbin example using NavContainer & Pages(基于 Explored App 中的 NavContainer 示例)。
还有这个 jsbin example is the same but uses bindElement().
最好用一个例子来解释我的问题: 观点:
<navContainer>
<page id="first">
<label text="{name}"/>
</page>
<page id="second">
<label text="{car}"/>
</page>
</navContainer>
该模型是一个 OData 服务。对于 'first' 页面,我想使用实体“/EmployeeSet(0)”,对于 'second' 页面,我想使用实体“/CarSet(0)”。
到目前为止我想出了这个技巧,但它对我不起作用:
this.byId("first").bindElement("/EmployeeSet(0)");
this.byId("second").bindElement("/CarSet(0)");
为每个页面设置绑定的正确方法是什么? 这仍然可以使用单个模型吗,所以我不需要在 'text="{secondModel>car}"'?
之类的视图中引用命名模型更新: WebIDE 中的自动完成列表未显示 "binding",但这正是我所需要的。有效。
你的代码看起来不错,我猜其他地方有问题。您是否还检查了服务器 returns 数据?您希望从上面列出的视图中看到什么?
无论如何,这里有一个 little jsbin example 我刚刚为您草拟的(见下文)。 binsElement() 其实和视图中的 binding="" 是一样的。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SAPUI5 single file template | nabisoft</title>
<script src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
id="sap-ui-bootstrap"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-libs="sap.m"
data-sap-ui-bindingSyntax="complex"
data-sap-ui-compatVersion="edge"
data-sap-ui-preload="async"></script>
<!-- use "sync" or change the code below if you have issues -->
<!-- XMLView -->
<script id="myXmlView" type="ui5/xmlview">
<mvc:View
controllerName="MyController"
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc">
<Panel id="panel1" binding="{/Customers('ALFKI')}">
<Text text="{CompanyName}"/>
</Panel>
<Panel id="panel2" binding="{/Customers('ANATR')}">
<Text text="{CompanyName}"/>
</Panel>
</mvc:View>
</script>
<script>
sap.ui.getCore().attachInit(function () {
"use strict";
//### Controller ###
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/odata/v2/ODataModel"
], function (Controller, ODataModel) {
"use strict";
return Controller.extend("MyController", {
onInit : function () {
this.getView().setModel(
new ODataModel("https://cors-anywhere.herokuapp.com/services.odata.org/V2/Northwind/Northwind.svc/", {
json : true,
useBatch : false
})
);
}
});
});
//### THE APP: place the XMLView somewhere into DOM ###
sap.ui.xmlview({
viewContent : jQuery("#myXmlView").html()
}).placeAt("content");
});
</script>
</head>
<body class="sapUiBody">
<div id="content"></div>
</body>
</html>
这是另一个 jsbin example using NavContainer & Pages(基于 Explored App 中的 NavContainer 示例)。 还有这个 jsbin example is the same but uses bindElement().