我正在寻找复合控件的一个很好的例子。 我目前的问题是,我打算绑定一个简单的值(例如一个字符串),它将在复合控件中的某些其他控件中重用。
以下代码似乎不正确:
metadata : {
properties : {
"head" : {type : "string", defaultValue : ""},
...
},
},
init : function() {
... some control with content ...
content : [
new sap.m.Label({text : this.getHead()})
]
...
我打算调用复合控件的计划如下: var oTemplate = new MyControl({head:" {Name}"}); 例如,在列表中使用模板。
绑定可能有效,但是因为我在" init"中构建了控件。部分看起来该属性未初始化,也不会自动更新。
进一步的实验(不起作用):
jQuery.sap.declare("StrangeControl");
sap.m.HBox.extend("StrangeControl", {
metadata : {
properties : {
},
aggregations : {
input : {type : "sap.m.Input", multiple : false},
}
},
// will be called during creation time
init : function() {
sap.m.HBox.prototype.init.call(this);
this.addItem(this.getAggregation("input"));
},
renderer : {},
onAfterRendering : function() {
if (sap.m.HBox.prototype.onAfterRendering!==undefined) {
sap.m.HBox.prototype.onAfterRendering.call(this);
}
}
});
我假设以这种方式使用控件:
new StrangeControl({
input : new sap.m.Input({value : "test"})
})
但在init
input
期间未定义(==null
)。上面提到的示例https://github.com/SAP/openui5/blob/master/src/sap.m/src/sap/m/SelectDialog.js似乎处理了"项目"以不同的方式,但对我来说,目前尚不清楚如何。
同时存在文档(至少在OpenUI5beta SDK中)。 https://openui5.hana.ondemand.com/#/topic/c1512f6ce1454ff1913e3857bad56392
如果链接不起作用,请搜索"复合控制"在"开发者指南"部分。
答案 0 :(得分:0)
答:只需将您的内部控件添加到隐藏的聚合中 - 它将自动免费获取所有数据绑定,您只需相应地绑定该控件的属性/聚合。
B:您也可以覆盖外部控件的setter,然后调用内部控件的setter来传播值。
setHead : function(oValue) {
return this.getAggregation("_myHiddenInnerControl").setValue(oValue);
}
仍然需要将内部控件添加到聚合中,以避免内存泄漏(否则您必须确保在exit方法中清除所有内容。