【发布时间】:2016-04-05 12:58:20
【问题描述】:
我有两个 XML 视图,我可以使用路由在它们之间导航。在第一个视图中,我有一个工作日列表,在第二个视图中,我想显示与工作日相关的膳食(与 ID 链接)。现在我只能显示包含膳食的整个列表(未过滤)。数据来自diet.json。
【问题讨论】:
标签: javascript data-binding sapui5 url-routing
我有两个 XML 视图,我可以使用路由在它们之间导航。在第一个视图中,我有一个工作日列表,在第二个视图中,我想显示与工作日相关的膳食(与 ID 链接)。现在我只能显示包含膳食的整个列表(未过滤)。数据来自diet.json。
【问题讨论】:
标签: javascript data-binding sapui5 url-routing
您可以使用路由参数(工作日或您提到的那个 id)来传递过滤器选项。 (看https://sapui5.hana.ondemand.com/#docs/guide/2366345a94f64ec1a80f9d9ce50a59ef.html) 然后通过创建一个过滤器: (看着: https://sapui5.hana.ondemand.com/#docs/guide/5295470d7eee46c1898ee46c1b9ad763.html)
我建议您将工作日的名称作为路由参数传递,因为它对用户来说看起来更好。
这也为您提供了一个优势,您可以在浏览器中为您的选择添加书签。
【讨论】:
//DETAIL.controller.js
sap.ui.define([
"sap/ui/demo/nav/controller/BaseController"
], function (BaseController) {
"use strict";
return BaseController.extend("sap.ui.demo.nav.controller.DETAIL", {
onInit: function () {
var oRouter = this.getRouter();
oRouter.getRoute("meal").attachMatched(this._onRouteMatched, this);
},
_onRouteMatched : function (oEvent) {
var oArgs, oView;
oArgs = oEvent.getParameter("arguments");
oView = this.getView();
var context = new sap.ui.model.Context(oView.getModel(), "/" + oArgs.dayId);
oView.setBindingContext(context);
var oItemTemplate =new sap.m.StandardListItem({
title:"{items}"
});
var oList = oView.getContent()[0].getContent()[0];
var oBindingInfo = {
path:"/meals",
template: oItemTemplate,
filters:[
new sap.ui.model.Filter("dayId", sap.ui.model.FilterOperator.EQ, oArgs.dayId)
]
};
oList.bindAggregation("items",oBindingInfo);
}
});
});
//DETAIL.view.xml
<mvc:View
controllerName="sap.ui.demo.nav.controller.DETAIL"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc">
<Page id="mealPage" title="{i18n>Detail}"
showNavButton="true"
navButtonPress="onNavBack"
class="sapUiResponsiveContentPadding">
<content>
<List id="mealListID" headerText="Meals" noDataText="Not Found">
</List>
</content>
</Page>
</mvc:View>
【讨论】: