我需要通过绑定聚合来构建页面,如下所示
查看
<NavContainer
id="navCon"
class="navContainerControl sapUiSmallMarginBottom" height="50%">
</NavContainer>
控制器
onInit : function()
{
var navCon = this.getView().byId("navCon");
navCon.bindAggregation('pages',{
path:'/pages',
factory : jQuery.proxy(this.createPages,this)
});
}
createPages : function(sid,context)
{
var eachpageData = context.getObject();
var grid = new sap.ui.layout.Grid({
defaultSpan:"L4 M6 S6"
});
var page = new sap.m.Page({
id : eachpageData.name,
title : eachpageData.name,
content : grid
});
grid.bindAggregation('content',{path:'data',factory :this.createPageContent});
return page;
},
但是当我从调试器看到它只有一页
时但是当我打电话给navto时
handleNav : function(evt)
{
var navCon = this.getView().byId("navCon");
var target = evt.getSource().getText();
if (target) {
//var animation = this.getView().byId("animationSelect").getSelectedKey();
navCon.to(this.getView().byId(target));
} else {
navCon.back();
}
}
如果我看到navCon.getPages()会给出2页。 我在这里犯了什么错误?
答案 0 :(得分:2)
您正尝试将DOM元素传递给 NavContainers.to(DOM)方法。这是它出错的地方。
但NavContainers.to()方法可以接受id(String)作为参数。
更改你的handleNav方法,如下所示。
handleNav : function(evt)
{
var navCon = this.getView().byId("navCon");
var target = evt.getSource().getText();
if (target) {
navCon.to(target);
} else {
navCon.back();
}
}
答案 1 :(得分:1)
NavContainers
只能显示一个页面。您可以向页面聚合添加更多页面,但只有在使用适当的参数触发导航事件时,它们才可见。之后,加载新页面的布局并添加到DOM中。
如果是SplitApp
,应用程序可以显示两个页面(主页和详细信息),如果您在平板电脑或桌面上看到它;但它是通过使用两个NavContainers
来实现的。
这就是控制检查员在导航之前返回一页的原因,在您导航到导航之前,第二页不是DOM的一部分。
如果在代码中放置断点而不是使用控制检查器,则可以调用navCon.getPages()
,该getElementById
应返回聚合中的页数。