自定义控件 - 如何将聚合封装在另一个控件中

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 定义为关联,以便您也可以向其中添加更多内容。

【讨论】:

正是我想要的!谢谢!

以上是关于自定义控件 - 如何将聚合封装在另一个控件中的主要内容,如果未能解决你的问题,请参考以下文章

如何在WPF中自定义控件

在WPF中自定义控件

如何在 BootstrapVue 的 Carousel 组件中自定义控件和指示器?

wpf中自定义控件的大小怎样听从外部容器的安排

如何在Android中自定义动画

在 Leanback 应用程序中自定义播放控件