Маршрутизация SAPUI5 - не удалось найти элемент управления с идентификатором idAppControl

Во-первых, я знаю, что были заданы похожие вопросы, но ни один из ответов не мог решить мою проблему.

Кратко загляните в мой код:

Мой Component.js выглядит так

routes: [
            {
                pattern: "",                //home page
                name: util.Constants.Tile,
                view: util.Constants.Tile,
                viewId: util.Constants.Tile,
                targetAggregation: "pages"
                //targetControl: "idAppControl"
            },
            {
                pattern: "firstExample",
                name: util.Constants.FirstExample,
                view: util.Constants.FirstExample,
                viewId: util.Constants.FirstExample,
                targetAggregation: "pages",
                targetControl : "idAppControl",
                subroutes : [
                    {
                        pattern: "firstExample",
                        name: util.Constants.ExampleMaster,
                        view: util.Constants.ExampleMaster,
                        targetAggregation: "masterPages",
                        targetControl: "idSplitContainerControl",
                    },
                    {
                        pattern: "firstExample/:typeMaster:",
                        name: util.Constants.ExampleSecondMaster,
                        view: util.Constants.ExampleSecondMaster,
                        targetAggregation: "masterPages",
                        targetControl: "idSplitContainerControl",
                        subroutes : [
                            {
                                pattern : "firstExample/:typeDetail:",
                                name : util.Constants.ExampleDetail,
                                view : util.Constants.ExampleDetail,
                                targetAggregation : "detailPages"
                            }
                        ]
                    }
                ]
            },

Краткое объяснение: это страница с обычным представлением приложения (без основного представления) и следующим за ним SplitContainer с двумя основными и одним подробным представлениями. Всякий раз, когда я хочу вызвать подробное представление

onSelect : function (e) {
    var routeTo = e.getSource().getTitle();

    this.router.navTo(util.Constants.ExampleDetail, { typeDetail : routeTo } );

},

это говорит

2015-03-30 14:50:06 Не удалось найти элемент управления с идентификатором idAppControl - sap-ui-core-dbg.js: 15213

Любая идея? Заранее спасибо за помощь!


Ссылки на похожие темы:


person Felix Bockemuehl    schedule 30.03.2015    source источник
comment
targetControl определяет элемент управления, который будет обслуживать представления как совокупность, например, содержимого. какой контроль должен служить вашим взглядам? возьмите идентификатор этого элемента управления и поместите его в targetControl: id_of_your_control   -  person Manuel Richarz    schedule 30.03.2015
comment
Спасибо за ответ. У меня есть SplitContainer (XML) с идентификатором idSplitContainerControl. В режиме SplitApp этот идентификатор должен обслуживать мои взгляды. Он отлично работает, если я закомментирую вторые подмаршруты в подробном представлении. Я выяснил, что DetailView (контроллер и представление) даже не загружается, хотя он правильно перенаправляет на правильный URL.   -  person Felix Bockemuehl    schedule 30.03.2015
comment
может быть, потому что ваш субмаршрут имеет тот же образец, что и основной маршрут. Я думаю, что с обычным маршрутизатором второй шаблон не будет совпадать из-за жадного варианта. но я не уверен, что это то же самое для подмаршрутов. вы можете попробовать это, включив жадный параметр в вашем маршрутизаторе. stackoverflow.com/questions/28948375 /   -  person Manuel Richarz    schedule 30.03.2015
comment
На самом деле это не тот же образец, я добавляю имя элемента списка, по которому щелкают, после firstExample /. Я попробовал жадный вариант, произошло то, что маршрутизатор автоматически перешел с первого на второе главное представление, но по-прежнему показывал то же сообщение об ошибке, что и раньше. В очередной раз благодарим за помощь! :)   -  person Felix Bockemuehl    schedule 30.03.2015


Ответы (1)


сложно отлаживать чужой код маршрутизации, поэтому вот мой рабочий маршрутизатор для многостраничного приложения. Первая - это простая страница с плитками, а вторая - это представление «Основное / подробное».

routes : [
    {
        pattern : "",
        name: "launchpad",
        view: "Launchpad",
        targetControl: "masterView"
    },
    {
        pattern : "split",
        name: "app",
        view: "App",
        targetControl: "masterView",
        subroutes : [
            {
                pattern : "master",
                name : "main",
                // placed in master masterPages aggregation of splitapp
                view : "Master",
                targetAggregation : "masterPages",
                targetControl : "idAppControl",
                // places detail in detailPages aggreg. of the splitapp
                subroutes : [
                    {
                        // product context is expected
                        // and which tab should be selected (supplier/category)
                        pattern : "{product}/:tab:",
                        name : "product",
                        view : "Detail",
                        targetAggregation :  "detailPages"
                    }
                ]
            }
        ]
    },
    // catchall routes, to show not found message, when route is not valid
    {
        name : "catchallMaster",
        view : "Master",
        targetAggregation : "masterPages",
        targetControl : "idAppControl",
        subroutes : [
            {
                pattern : ":all*:",
                name : "catchallDetail",
                view : "NotFound"
            }
        ]
    }
]
}
// custom routing is performed in MyRouter.js
},

Обратите внимание, что targetControl установлен для обоих маршрутов. masterView - это часть MasterApp, которая загружается первой.

<mvc:View
    xmlns:mvc="sap.ui.core.mvc"
    displayBlock="true"
    xmlns="sap.m">
    <App
        id="masterView">
    </App>
</mvc:View>

idAppControl является частью App.view.xml с <SplitApp id="idAppControl" />. Я основал свое приложение на примере из руководств для разработчиков, как и вы.

Component.js имеет это:

createContent: function() {
    var viewData = {
        component:this
    };
    return sap.ui.view({
        viewName: "sap.ui.demo.app.view.MasterApp",
        type: sap.ui.core.mvc.ViewType.XML,
        viewData: viewData
    });
}

App.view:

<mvc:View
    xmlns:mvc="sap.ui.core.mvc"
    displayBlock="true"
    xmlns="sap.m">
    <SplitApp id="idAppControl" />
</mvc:View>

Конфиг:

routing: {
    config: {
        // custom router class
        routerClass : sap.ui.demo.app.MyRouter,
        // xml views
        viewType : "XML",
        // absolute path to views
        viewPath : "sap.ui.demo.app.view",
        // unless stated otherwise, router places view in detail part
        targetAggregation : "pages",
        // don't clear the detail pages before views are added
        clearTarget : false
    },
}

Глядя на свой маршрутизатор, я бы сказал, что у вас проблемы с порядком страниц. И в качестве общего совета я хотел бы сказать, что navTo принимает параметр «имя» маршрутов, а не вид или шаблон. Мне потребовалось время, чтобы понять это.

С уважением,

Майкл

person Michael K.    schedule 31.03.2015
comment
Спасибо за ответ и извините за поздний ответ! Правильно ли я понимаю, что вы используете обычное представление приложения (имя: app) и устанавливаете SplitContainer поверх него? А как вы называете подробный просмотр во втором подмаршруте? Поскольку независимо от того, сколько у меня основных представлений, все они работают нормально, только подробное представление в субмаршруте выдает сообщение об ошибке. - person Felix Bockemuehl; 01.04.2015
comment
Я удалил из проекта все, что не было необходимо, и попытался сохранить только самые простые вещи, возможно, это упрощает просмотр dl.dropboxusercontent.com/u/37336669/template%20new.zip Это, вероятно, очень простая и глупая ошибка, которую я делаю, но, честно говоря, не понимаю Какие! - person Felix Bockemuehl; 01.04.2015
comment
Вам не нужен rootView: "view.App"`` in the Component.js when you have a createContent function in there. In the config you use targetAggregation: detailPages`, я добавил свою конфигурацию выше. Я понятия не имею, что UI5 делает с targetAggregation, что само по себе довольно странный термин. Но у меня всегда множественное число. detailPages, masterPages, страницы. Я не могу запустить ваше приложение, вы используете Node или он вам нужен отдельно? - person Michael K.; 01.04.2015
comment
Извините, я не включил пакет ресурсов sapui5 и просто связал sap-ui-core.js, размещенный на netweaver.ondemand, подумал, что этого будет достаточно ... в любом случае, я обнаружил свою ошибку. Вы были правы со своей конфигурацией, я включил в нее targetControl, из-за чего элемент управления с идентификатором idAppControl не может быть найден. Довольно глупая ошибка, которой можно избежать! Спасибо большое за вашу помощь! :) - person Felix Bockemuehl; 01.04.2015
comment
Я его загрузил. Вы можете найти файлы здесь, github.com/michaelklopf/ui5_launchpad_prototype, но я не тестировал его снова , поэтому я не уверен, что он будет работать с текущими выпусками UI5. - person Michael K.; 30.07.2015