【发布时间】:2014-07-02 17:48:48
【问题描述】:
我有两个控件,一个从 Control 扩展而来,一个从我的自定义控件扩展而来。
控件有一个数组属性,我希望每个实例都是唯一的:
/* parent control */
sap.ui.core.Control.extend("foo.MyControl", {
metadata: {
properties: {
name: { type: 'string' },
myArray: { type: 'array', defaultValue: [] }
}
},
renderer: {
render: function( oRenderManager, oControl ) {
oRenderManager.write('<div>My name is: ' + oControl.getName() + '</div>');
}
}
});
/* child control */
foo.MyControl.extend("foo.MyChildControl", {
renderer: {
render: foo.MyControl.prototype.render
}
});
然后我创建它们的实例并将它们放在 dom 中:
/* create and place instances */
var oMyControl = new foo.MyControl({
name: 'parent control'
}),
oMyChildControl = new foo.MyChildControl({
name: 'child control'
});
oMyControl.placeAt('uiArea');
oMyChildControl.placeAt('uiArea');
为什么两个数组实例相等?
alert(oMyControl.getMyArray() === oMyChildControl.getMyArray()); // true
我希望每个实例都有自己的数组。
**
TL;DR 对于定义控件元数据,将数组属性声明为“object”类型
**
【问题讨论】:
-
您的示例中可能缺少代码,因为它显示为 oMyControl.getMyArray() === [] && oMyChildControl.getMyArray() === [], ([] === [] ) 真的
-
如果我填充 oMyControl.getMyArray() 它也会填充 oMyChildControl.getMyArray() 因为它们共享相同的引用,这是我感到困惑的。我希望他们有自己的数组实例。
标签: sapui5