2014-11-23 2 views
4

В SAPUI5/OpenUI5 xmlfragment documentation третьим параметром является контроллер для обработки действий из фрагмента.Передача другого контроллера при создании экземпляра в SAPUI5

Это очень важно для диалога фрагмента, где есть кнопки для пресса и т.д.

Большую часть времени я видел этот экземпляр в качестве this или sap.ui.getCore().byId('<element>').getController())

Смотрите пример на Fragment not get correct Controller

Потому что сложности в конкретном диалоге я хотел бы иметь отдельный контроллер для него.

Я рассмотрел это и сделал несколько попыток, но пока не удался.

Я применил рабочий пример на github с использованием this.

Но я хотел бы создать экземпляр Dialog.js в качестве контроллера для Dialog.fragment.xml от initial.view.controller

Любые берущих?

Запрос на получение запроса с радостью.

Суть примера заключается в следующем (это initial.controller.js):

sap.ui.controller("sc.test.view.initial", { 

oDialog: null, 

openTestDialog: function(){ 
    console.log("in open dialog"); 
    // instantiate the other controller 
    var oDialogController = new sc.test.view.Dialog(); 
    // this next commented line is the 'normal' way to do it 
    // oDialog = new sap.ui.xmlfragment("sc.test.view.Dialog", this); //oDialogController); 
    // this is what I would like to achieve 
    oDialog = new sap.ui.xmlfragment("sc.test.view.Dialog", oDialogController); 
    oDialog.open(); 
},  


onCartDialogCancel:function(oEvent){ 
// this function would then be in the other controller but how to get a handle on the dialog? 
    oDialog.close(); 

} 

});

Спасибо.

+0

Пожалуйста, пост (упрощенный) пример вы получили здесь. (Политика Stackoverflow) –

+0

Done Thanks @ Gábor-bakos – njames

ответ

1

(Только что до аэропорта SYD)

Все, что вам не хватает является

jQuery.sap.require("sc.test.view.Dialog"); 

в вашем initial.controller.js.

Выдвинутый быстрое решение в отрасли для вашего репо и открыл PR

1

единственного примером я мог бы найти близко к вашему был в материальных Недостачах Fiori приложение

oCtrl = sap.ui.controller("myapp.fragments.DirectCallDialog"); 
    oDirectCallDialog = sap.ui.xmlfragment("myapp.fragments.DirectCallDialog", oCtrl); 

много примеров инъекционного контроллер, когда фрагмент был вызван из вспомогательного класса. Класс-помощник способствует повторному использованию, например, тот же фрагмент диалога может быть вызван из нескольких представлений/компонентов. Метод вспомогательного класса для настройки диалога вызывается из контроллера, а параметр oController - «this».

НТН JSP

1

Я скопировал существующий controller.js, и переименовал его.

Затем, созданный таким образом, как нижний, и передал его фрагменту.

var oNewController = новый sap.ui.core.mvc.Controller ("myProject.DialogController"); this._oDialog = sap.ui.xmlfragment («myPopup», «myProject.fragments.myPopup», oNewController);

Все троеборье теперь обрабатываются в oNewController, а не ранее использовали "это" ...

Смежные вопросы