【问题标题】:Pass another controller when instantiating a fragment in SAPUI5在 SAPUI5 中实例化片段时传递另一个控制器
【发布时间】:2014-11-23 22:46:25
【问题描述】:

在SAPUI5/OpenUI5xmlfragment documentation中第三个参数是一个控制器,用于处理来自片段的动作。

这对于需要按下按钮等的对话框片段至关重要。

大多数时候我看到它被实例化为thissap.ui.getCore().byId('<element>').getController())

Fragment not get correct Controller查看示例

由于特定对话框的复杂性,我想为其设置一个单独的控制器。

我已经环顾四周并进行了几次尝试,但到目前为止还没有成功。

我在github 上放置了一个使用this 的工作示例。

但我想将 Dialog.js 实例化为来自 initial.view.controllerDialog.fragment.xml 的控制器

有接受者吗?

很高兴收到拉取请求。

例子的症结如下(这是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();

}

});

谢谢。

【问题讨论】:

  • 请也发布您在此处获得的(简化)示例。 (Stackoverflow 政策)
  • 谢谢@Gábor-bakos

标签: javascript controller fragment sapui5


【解决方案1】:

(刚到SYD机场)

你所缺少的只是

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

在你的initial.controller.js

在一个分支中将一个快速修复推送到你的 repo 并打开一个PR

【讨论】:

    【解决方案2】:

    在 Material Shortage Fiori 应用中,我能找到的唯一示例是与您的应用程序接近

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

    从帮助类调用片段时注入控制器的大量示例。辅助类促进重用,例如可以从多个视图/组件调用相同的对话框片段。对话框设置的辅助类方法是从控制器中调用的,并且 oController 参数设置为 'this'。

    hth jsp

    【讨论】:

      【解决方案3】:

      我复制了一个现有的 controller.js,并将其重命名。

      然后,将其实例化为以下内容,并与片段一起传递。

      var oNewController = new sap.ui.core.mvc.Controller("myProject.DialogController"); this._oDialog = sap.ui.xmlfragment("myPopup","myProject.fragments.myPopup", oNewController);

      现在所有事件都在 oNewController 中处理,而不是之前使用的“this”...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 1970-01-01
        • 2015-08-29
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        相关资源
        最近更新 更多