UI5 navContiner bindAggregation未加载页面

时间:2016-06-01 11:59:29

标签: sapui5

我需要通过绑定聚合来构建页面,如下所示

查看

<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;
    },

但是当我从调试器看到它​​只有一页

enter image description here

但是当我打电话给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页。 我在这里犯了什么错误?

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应返回聚合中的页数。