【问题标题】:Custom Control - how to encapsulate aggregation in another control自定义控件 - 如何将聚合封装在另一个控件中
【发布时间】:2015-12-07 20:26:43
【问题描述】:

我可能会绕过这个错误,但我想创建一个自定义控件,它是 sap.m.Dialog 的子类。这个新控件将具有聚合“leftImage”,然后将其放置在 Horizo​​ntalLayout(私有变量)中。但是,这可能会导致错误,因为“leftImage”已经是我的控件的依赖项。

那么如何将聚合封装在另一个控件上?

【问题讨论】:

    标签: javascript custom-controls aggregation sapui5


    【解决方案1】:

    sap.m.Dialog 已经有一个“内容”聚合,其中包含要呈现的控件,因此您只需在其中添加自定义位。

    所以,这样的模式应该可以工作:

    sap.ui.define([
        "jquery.sap.global",
        "sap/m/Dialog",
        "sap/m/Image",
        "sap/ui/layout/HorizontalLayout"
    ], function(jQuery, Dialog, Image, HorizontalLayout) {
        "use strict";
    
        var MyDialog = Dialog.extend("sap.ui.mylib.MyDialog", {
            metadata: {
                library: "sap.ui.mylib",
                associations: {
                    leftImage: {type: "sap.m.Image", multiple: false}
                }
            },
            renderer: {
                // inherit rendering from sap.m.Dialog
            }
        });
    
        MyDialog.prototype.init = function() {
            if (Dialog.prototype.init) {
                Dialog.prototype.init.apply(this, arguments);
            }
    
            var oImage = new Image({
                    src: '...'
                }),
                oHorizontalLayout = new HorizontalLayout({
                    content: [
                        oImage
                    ]
                });
    
            this.addContent(oHorizontalLayout);
        };
    
        return MyDialog;
    }, /* bExport= */ true);
    

    leftImage 定义为关联,因为它将由 Horizo​​ntalLayout 聚合。稍后可以通过以下方式访问它:

    var oLeftImage = sap.ui.getCore().byId(oMyDialog.getLeftImage());
    

    您可能还想将 Horizo​​ntalLayout 定义为关联,以便您也可以向其中添加更多内容。

    【讨论】:

    • 正是我想要的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多