我构建了一个这样的控件:
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
我的代码有什么问题?
答案 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
函数放在渲染器中。由于将不会呈现模板,因此将仅添加一次此内容。