基于SAPUI5 VBox的自定义复合控件中的重复控件

时间:2016-04-06 08:26:11

标签: sapui5

我构建了一个这样的控件:

sap.ui.define([
    "sap/m/VBox",
    "sap/m/Label",
    "sap/m/Input",
], function (VBox, Label, Input) {
    "use strict";
    return VBox.extend("my.special.Control", {
        metadata : {
            properties : {
            },
            events: {
            },
        },
        init : function () {
            var that = this;
            if (VBox.prototype.init) {
                VBox.prototype.init.call(this);
            }
            this.addItem(new Label({text : "label"}));
            this.addItem(new Input({value : "value"}));
        },
        renderer : {},
    });
});

在使用过程中,它看起来像控件重复元素(标签和输入)。我假设复制将在SAPUI5框架内以某种方式完成。

您将在此处找到问题的示例: https://jsbin.com/fuxenezije/1/edit?html,console,output

我的目的是使用一些更复杂的函数来扩展控件,但是发布的示例将只显示重用新内部控件的最小想法。

任何人都知道我在这里做错了什么,或者它可能是UI5框架中的错误。对我来说,看起来这种情况发生在Grid控件内的FlexBox组合中。

如果我像这样提供两个控件

template : new my.own.Control({
   items : [ new sap.m.Label({text:"l"}), new sap.m.Input()]
})

什么都不会重复。

https://jsbin.com/dilohacudu/1/edit?html,console,output

我的代码有什么问题?

2 个答案:

答案 0 :(得分:0)

来了

Sub Sort()
lastrow = Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To lastrow
    lastcolumn = Cells(i, Columns.Count).End(xlToLeft).Column
    ReDim sortalphabet(lastcolumn - 2) As String
    For j = 2 To lastcolumn
        sortalphabet(j - 2) = Cells(i, j)
    Next j
    For ii = LBound(sortalphabet) To UBound(sortalphabet) - 1
        For j = LBound(sortalphabet) To UBound(sortalphabet) - 1
            If ii < UBound(sortalphabet) Then
                Condition1 = sortalphabet(j) > sortalphabet(j + 1)
                If Condition1 Then
                    t = sortalphabet(j)
                    sortalphabet(j) = sortalphabet(j + 1)
                    sortalphabet(j + 1) = t
                 End If
            End If
        Next j
    Next ii
    For j = 2 To lastcolumn
        Cells(i, j) = sortalphabet(j - 2)
    Next j
Next i
End Sub

您当然应该删除默认值:p

您现在可以使用新的Control({label:&#39; mylabel&#39;,value:&#39; myvalue&#39;}创建您的控件,使用setter重新渲染,并利用sapui5的绑定< / p>

答案 1 :(得分:0)

我遇到了类似的问题。然后我找到了这篇文章。

唯一的区别是我在表单元格中使用自定义控件。后来我发现,即使表中只有5行,init函数也会被调用6次。

原因是自定义控件将作为模板初始化一次,然后在每一行创建实例时将再次调用init函数。因此内容将被复制。

我解决问题的方法是在渲染之前将this.addItem函数放在渲染器中。由于将不会呈现模板,因此将仅添加一次此内容。