在另一个视图 SAP UI5 的服务 URL 中传递一个视图的输入值
Pass input values of one view in service URL of another view SAP UI5
我创建了两个视图- view1:
和视图 2:
并在 View1Controller 中将输入的值设置为 Json 模型并导航到 view2。
onInit: function() {
oModel = new sap.ui.model.json.JSONModel();
},
onPress1: function(oEvent) {
if (typeof(sales) != 'undefined' || sales != null) {
oModel.setData({
"myData":{
"sales": sales,
"cust": cust,
"appl": "LEVEL1"
}
});
sap.ui.getCore().setModel(oModel);
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("header");
} else {
alert("Please select Sales Person..")
}
},
sChange: function(oEvent) {
sales = this.byId("salesPerson").getValue().split(",").pop();
},
cChange: function(oEvent) {
cust = this.byId("customer").getValue().split(",").pop();
}
在 view2Controller 中,我收到了 view1 输入的数据并创建了一个 Json 模型,我想根据 view1 输入的数据在 view2 中创建一个 table。
function(Controller, JSONModel, History) {
"use strict";
var level, sales, cust;
return Controller.extend("dashdashboard.controller.View2", {
onInit: function() {
var oModel= sap.ui.getCore().getModel(oModel);
level = oModel.getProperty("/myData/appl");
sales = oModel.getProperty("/myData/sales");
cust = oModel.getProperty("/myData/cust");
}
现在我有服务了 URL-- sap/opu/odata/sap/ZSD_DASHBOARD1_SRV/ZAPPROVALSet(APPLEVEL='LEVEL1',CUSTOMER='',SPERSON='00000009')/SO_HeaderSet
为此URL我需要传递所有三个值所以我这样使用-
ZAPPROVALSet(APPLEVEL='"+level+"',CUSTOMER='"+cust+"',SPERSON='"+sales+"')/SO_HeaderSet
请告诉我如何将此路径绑定到我的 view2 Table。
它给我错误。
<Table items="{ path: '/ZAPPROVALSet(APPLEVEL='"+level+"',CUSTOMER='"+cust+"',SPERSON='"+sales+"')/SO_HeaderSet', sorter: { path: 'vbeln' } }" inset="false" id="idProductsTable">
请帮忙。
我认为您需要使用 Expression Binding 的形式。 (不要忘记在 UI5 bootstrap 中设置 data-sap-ui-bindingSyntax="complex" !)
<Table items="{ path: '{= '/ZAPPROVALSet(APPLEVEL='$(viewModel2>level}',CUSTOMER='$(viewModel2>cust}',SPERSON='$(viewModel2>sales}')/SO_HeaderSet'}', sorter: { path: 'vbeln' } }" inset="false" id="idProductsTable">
为什么通过 Json 模型而不是通过 Routing Parameters 将数据从 View1 传输到 View2 是有原因的吗?
我找到了解决这个问题的方法。我们应该在从一个视图路由到另一个视图时发送参数,并使用 RoutePatternMatched 概念。最后在_onRoutePatternMatched函数中使用.read()来解析。
在这里我们可以从参数中获取值并在将这些值正确地放入 URL 后传递我们的框架 URL。
可以参考simple-exercise-on-odata-and-sap-ui5-application
Call oDataModel.read( pass_your_framed_url_here , {
success: function(receivedData){
//set the received data to local json model and bind that to the view
} });
您可以进行读取,但更简洁的方法是在模式匹配处理程序中使用扩展进行元素绑定,并在收到数据时进行绑定。
我创建了两个视图- view1:
和视图 2:
并在 View1Controller 中将输入的值设置为 Json 模型并导航到 view2。
onInit: function() {
oModel = new sap.ui.model.json.JSONModel();
},
onPress1: function(oEvent) {
if (typeof(sales) != 'undefined' || sales != null) {
oModel.setData({
"myData":{
"sales": sales,
"cust": cust,
"appl": "LEVEL1"
}
});
sap.ui.getCore().setModel(oModel);
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("header");
} else {
alert("Please select Sales Person..")
}
},
sChange: function(oEvent) {
sales = this.byId("salesPerson").getValue().split(",").pop();
},
cChange: function(oEvent) {
cust = this.byId("customer").getValue().split(",").pop();
}
在 view2Controller 中,我收到了 view1 输入的数据并创建了一个 Json 模型,我想根据 view1 输入的数据在 view2 中创建一个 table。
function(Controller, JSONModel, History) {
"use strict";
var level, sales, cust;
return Controller.extend("dashdashboard.controller.View2", {
onInit: function() {
var oModel= sap.ui.getCore().getModel(oModel);
level = oModel.getProperty("/myData/appl");
sales = oModel.getProperty("/myData/sales");
cust = oModel.getProperty("/myData/cust");
}
现在我有服务了 URL-- sap/opu/odata/sap/ZSD_DASHBOARD1_SRV/ZAPPROVALSet(APPLEVEL='LEVEL1',CUSTOMER='',SPERSON='00000009')/SO_HeaderSet
为此URL我需要传递所有三个值所以我这样使用-
ZAPPROVALSet(APPLEVEL='"+level+"',CUSTOMER='"+cust+"',SPERSON='"+sales+"')/SO_HeaderSet
请告诉我如何将此路径绑定到我的 view2 Table。 它给我错误。
<Table items="{ path: '/ZAPPROVALSet(APPLEVEL='"+level+"',CUSTOMER='"+cust+"',SPERSON='"+sales+"')/SO_HeaderSet', sorter: { path: 'vbeln' } }" inset="false" id="idProductsTable">
请帮忙。
我认为您需要使用 Expression Binding 的形式。 (不要忘记在 UI5 bootstrap 中设置 data-sap-ui-bindingSyntax="complex" !)
<Table items="{ path: '{= '/ZAPPROVALSet(APPLEVEL='$(viewModel2>level}',CUSTOMER='$(viewModel2>cust}',SPERSON='$(viewModel2>sales}')/SO_HeaderSet'}', sorter: { path: 'vbeln' } }" inset="false" id="idProductsTable">
为什么通过 Json 模型而不是通过 Routing Parameters 将数据从 View1 传输到 View2 是有原因的吗?
我找到了解决这个问题的方法。我们应该在从一个视图路由到另一个视图时发送参数,并使用 RoutePatternMatched 概念。最后在_onRoutePatternMatched函数中使用.read()来解析。
在这里我们可以从参数中获取值并在将这些值正确地放入 URL 后传递我们的框架 URL。
可以参考simple-exercise-on-odata-and-sap-ui5-application
Call oDataModel.read( pass_your_framed_url_here , {
success: function(receivedData){
//set the received data to local json model and bind that to the view
} });
您可以进行读取,但更简洁的方法是在模式匹配处理程序中使用扩展进行元素绑定,并在收到数据时进行绑定。