在SAPUI5上从一个XMLview(列表)传递到另一个XMLview(列表)的参数
我是SAPUI5的新手,寻求您的建议以解决一个问题。我的要求是: 第1页显示产品的XMLview列表。 第2页显示了XMLview上该产品在仓库中的存储箱列表。 第3页显示存储箱的详细信息 我创建了一个oDATA,两个实体类型:Product和Bin,都实现了GetEntitySet,我认为oDATA的结果很好。我的问题是在第二个XMLview页面上,我很难设置sap.m.list上的项目。。。我的XML如下所示,问题是所有的硬编码,我试图实现的是传递产品/工厂/仓库第一页的值。。。请告知如何动态解析此值分配。非常感谢在SAPUI5上从一个XMLview(列表)传递到另一个XMLview(列表)的参数,sapui5,Sapui5,我是SAPUI5的新手,寻求您的建议以解决一个问题。我的要求是: 第1页显示产品的XMLview列表。 第2页显示了XMLview上该产品在仓库中的存储箱列表。 第3页显示存储箱的详细信息 我创建了一个oDATA,两个实体类型:Product和Bin,都实现了GetEntitySet,我认为oDATA的结果很好。我的问题是在第二个XMLview页面上,我很难设置sap.m.list上的项目。。。我的XML如下所示,问题是所有的硬编码,我试图实现的是传递产品/工厂/仓库第一页的值。。。请告知如何动
<Page
title="Warehouse Storage Bin List"
showNavButton="true"
navButtonPress="handleNavButtonPress" >
<List items="{/Bin?$filter=Lgnum eq 'XXX' and Matnr eq 'XXXXXX' and Werks eq 'XXXX'}">
<ObjectListItem type="Active"
press="handleListItemPress"
title="{StgeBin}" intro="{StgeType}" number="{Stock}"
numberUnit="">
<attributes ObjectAttribute=""></attributes>
</ObjectListItem>
</List>
</Page>
BR,J我想您已经知道如何在sap.m中的页面之间导航了。如果没有,则这是您正在搜索的主要方法(使用
sap.m.App
,如果使用sap.m.SplitApp
,则会有更多方法):
注意参数oData
-
此可选对象可以携带任何应提供给目标页面的有效负载数据。目标页面上的“beforeShow”事件将包含此数据对象作为“data”属性
因此,假设您在第一个视图中使用sap.m.List来触发到第二个视图的导航。它可能是这样的:
View1.view.xml
<Page title="Products">
<List items="{/Products}" selectionChange="onSelectionChange">
<StandardListItem title="{title}" />
</List>
</Page>
View2.controller.js
onSelectionChange : function(oEv) {
var oItem = oEv.getParameter("listItem");
var oApp = // get your App
// Binding path will be something like "/Products/4" (fifth item selected)
oApp.to("view2", "slide", { path : oItem.getBindingContextPath() })
}
onInit : function() {
var self = this;
this.getView().addEventDelegate({
onBeforeShow: function(oEv) {
var detailBindingPath = oEv.data.path;
// establish view2 bindings based on the selected binding path
var oList = self.getView().byId("List");
oList.bindItems(detailBindingPath +"/Bin", <YOUR_TEMPLATE>, null, [
new sap.ui.model.Filter("Lgnum", sap.ui.model.FilterOperator.EQ, 'XXX'),
new sap.ui.model.Filter("Matnr", sap.ui.model.FilterOperator.EQ, 'XXXXXX'),
new sap.ui.model.Filter("Werks", sap.ui.model.FilterOperator.EQ, 'XXXX')
]);
}
});
}
onInit:function(){
var self=这个;
此.getView().addEventDelegate({
onBeforeShow:功能(oEv){
var detailBindingPath=oEv.data.path;
//基于选定的绑定路径建立view2绑定
var oList=self.getView().byId(“列表”);
oList.bindItems(detailBindingPath+“/Bin”,null[
新的sap.ui.model.Filter(“Lgnum”,sap.ui.model.FilterOperator.EQ,“XXX”),
新的sap.ui.model.Filter(“Matnr”,sap.ui.model.FilterOperator.EQ,“XXXXXX”),
新的sap.ui.model.Filter(“Werks”,sap.ui.model.FilterOperator.EQ,“XXXX”)
]);
}
});
}
您必须在代码中建立绑定,因为在视图创建期间您不知道绑定路径
希望我得到了你想要做的。没有运行代码,所以如果遇到问题,请告诉我
溴
克里斯谢谢克里斯。我遵循了您列出的步骤。但是,我同意您的方法,在View2.controller.js onBeforeShow中。。。我没有获取detailBindingPath(在调试中不可用),并且在var oList xxxxx行中没有“UncaughtTypeError:undefined不是函数”。不知道我是否错过了什么。我尝试了另一种方式来获得价值。。。似乎没有一个起作用。再次感谢您的帮助。我在回答中稍微修改了onInit。您必须将“this”放入匿名函数上下文(var self=this;)。oEv看起来怎么样?谢谢Chris,我用oEv让这个部件工作起来了。我现在在绑定中,谢谢你的帮助。你好,克里斯,在这里添加更多。。。在我的例子中,我使用第1页作为产品列表,第2页作为基于第1页上选择的产品的存储箱列表,然后取出所有的存储箱。所以您的beforeshow oList.bindItems需要更多建议。。。我必须使用url/Bin?$过滤器使其工作。对于列表项=??,您建议在我的xml视图中放置什么???我是放进垃圾箱还是空的或其他东西。。。这似乎是我的最后一个街区。再次感谢,需要添加一行遗漏。。。在调试该bindItem时,它发出错误=>Uncaught错误:元素sap.m.List#Bin--List!的聚合项缺少模板或工厂函数。。我的代码如下(目前为硬代码)oList.bindItems(“/Bin?$filter=Lgnum eq'XXX'和Matnr eq'XXXXXX'和Werks eq'XXXX'”);你好,克里斯,谢谢。
onInit : function() {
var self = this;
this.getView().addEventDelegate({
onBeforeShow: function(oEv) {
var detailBindingPath = oEv.data.path;
// establish view2 bindings based on the selected binding path
var oList = self.getView().byId("List");
oList.bindItems(detailBindingPath +"/Bin", <YOUR_TEMPLATE>, null, [
new sap.ui.model.Filter("Lgnum", sap.ui.model.FilterOperator.EQ, 'XXX'),
new sap.ui.model.Filter("Matnr", sap.ui.model.FilterOperator.EQ, 'XXXXXX'),
new sap.ui.model.Filter("Werks", sap.ui.model.FilterOperator.EQ, 'XXXX')
]);
}
});
}