[英]SAPUI5: Routing with parameters - How get correct path of binding context
我正在嘗試使用此演練中的參數來實現路由: https : //sapui5.hana.ondemand.com/1.58.7/#/topic/2366345a94f64ec1a80f9d9ce50a59ef
但是,與其獲取數據作為路徑
/Invoices(CustomerName='Alfreds%20Futterkiste',Discount=0f,OrderID=10835....
當他們這樣做時:
oRouter.navTo("detail", {invoicePath:
oItem.getBindingContext("invoice").getPath().substr(1)});
當我在控制器中使用該函數時(請參見下面的onFwdDetail),我只會得到一個字符串路徑:
nodes/0
而且不能在路由中使用(請參見下面的manifest.json):
Invalid value "nodes/0" for segment "{detailPath}".
我認為這是因為我的JSON文件的結構與演練中的不同。 如何獲得帶有用於路由的數據的正確路徑?
我的實現的相關部分如下:
Data.JSON
{
"nodes": [
{
"text": "Text1",
"status1": "Status10",
"status2". "Status11"
},
{
"text": "Text2",
"status1": "Status20",
"status2". "Status21"
},...]
}
Overview.view.xml
<Table
items="{path: 'mydata>/nodes'}">
...
<ColumnListItem type="Navigation" press="onFwdDetail">
Overview.controller.js
onInit : function() {
var oModel = new JSONModel("model/Data.JSON");
this.getView().setModel(oModel, "mydata");
},
onFwdDetail : function(oEvent) {
var oItem = oEvent.getSource();
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.navTo("detail", {detailPath:
oItem.getBindingContext("mydata").getPath().substr(1)});
console.log(oItem.getBindingContext("mydata").getPath().substr(1));
}
的manifest.json
{
"pattern": "details/{detailPath}",
"name": "details",
"target": "details"
}
它們的路徑是到OData模型的實體的路徑。 您的路徑是JSON模型實體的路徑。
這些路徑完全不同。 最重要的是,您的路徑中包含斜線,而他們的路徑中沒有。 這使試圖匹配details/{detailPath}
和details/nodes/0
的解析器感到困惑。
在您的示例中, 0
本身是有效路徑。 nodes
是一個數組,可以執行nodes[0]
。 只是路由類不喜歡這種格式。
因此,您只需將0
傳遞給detailPath
。 然后,您可以在詳細視圖中構建原始鍵( "nodes/" + detailPath
)並將視圖綁定到該鍵。
對於OData btw,我還將推薦這種方法:
OData模型的偽代碼:
控制器A:
// read relevant values from binding context
var oContext = oItem.getBindingContext("myModel");
var sKeyName = oContext.getObject("CustomerName");
var sKeyId = oContext.getObject("OrderID");
// trigger navigation
oRouter.navTo("orderDetail", { name: sKeyName, id: sKeyId });
控制器B:
_onRouteMatched: function (oEvent) {
var oModel = this.getModel("myModel");
var that = this;
// read params from routing
var sKeyName = oEvent.getParameter("arguments").name;
var sKeyId = oEvent.getParameter("arguments").id;
// as soon as the metadata of the model are available there is a great API to build keys
oModel.metadataLoaded().then(function () {
var sPath = oModel.createKey("/Invoices", {
CustomerName: sKeyName,
OrderID: sKeyId
});
// sPath should be something like "/Invoices(CustomerName='Troll',OrderID=12345)"
that.getView().bindElement({ path: sPath });
});
},
的manifest.json
"pattern": "order/{name},{id}",
"name": "orderDetail"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.