SAPUI5:复合控件的示例?

时间:2014-10-27 11:17:25

标签: binding controls sapui5

我正在寻找复合控件的一个很好的例子。 我目前的问题是,我打算绑定一个简单的值(例如一个字符串),它将在复合控件中的某些其他控件中重用。

以下代码似乎不正确:

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

如果链接不起作用,请搜索"复合控制"在"开发者指南"部分。

1 个答案:

答案 0 :(得分:0)

答:只需将您的内部控件添加到隐藏的聚合中 - 它将自动免费获取所有数据绑定,您只需相应地绑定该控件的属性/聚合。

B:您也可以覆盖外部控件的setter,然后调用内部控件的setter来传播值。

setHead : function(oValue) {
  return this.getAggregation("_myHiddenInnerControl").setValue(oValue);
}

仍然需要将内部控件添加到聚合中,以避免内存泄漏(否则您必须确保在exit方法中清除所有内容。