Sapui5 UI5自定义控件,在表中使用时数据绑定不起作用

Sapui5 UI5自定义控件,在表中使用时数据绑定不起作用,sapui5,Sapui5,我的自定义控件的数据绑定有问题 我的控件继承自sap.m.Input,并使用特殊的值助手对其进行扩展。 我的新控件的一个新属性是“值帮助”对话框的一个简单标题。这是绑定到i18n模型的 当我现在以正常形式使用我的控件时,一切正常。标题已正确绑定,并显示该模型中绑定的i18n属性的值。如果将控件用作sap.ui.table控件列中的模板,它只显示title属性的默认值。数据绑定似乎不起作用。但仍在处理继承的属性(如值) 为简化起见,我的控件现在只有该title属性,如果请求valuehelp,它会

我的自定义控件的数据绑定有问题

我的控件继承自
sap.m.Input
,并使用特殊的值助手对其进行扩展。
我的新控件的一个新属性是“值帮助”对话框的一个简单标题。这是绑定到i18n模型的

当我现在以正常形式使用我的控件时,一切正常。标题已正确绑定,并显示该模型中绑定的i18n属性的值。如果将控件用作
sap.ui.table
控件列中的模板,它只显示title属性的默认值。数据绑定似乎不起作用。但仍在处理继承的属性(如值)

为简化起见,我的控件现在只有该title属性,如果请求valuehelp,它会在警报框中显示当前值。在表中,它显示了默认值。在没有表格的情况下,它显示了i18n模型的界限值

以下是简化的控制代码:

sap.ui.define([
“sap/ui/core/Control”,
“sap/m/Input”,
],功能(控制,输入){
“严格使用”;
返回Input.extend(“DvpClsSuggestInput”{
“元数据”:{
“财产”:{
//值帮助对话框的标题
“标题”:{
键入:“字符串”,
默认值:“标题”
}
}
},
init:function(){
Input.prototype.init.call(this);
此.setShowValueHelp(true);
this.attachValueHelpRequest(this.onValueHelpRequest.bind(this));
},
onValueHelpRequest:函数(oEvent){
var lvTitle=this.getvhtTitle();
警报(lvTitle);
},
});
});
});
sap.ui.table.table
中的用法(它不起作用并显示title属性的默认值):


有效的用法:



再一次,对value属性的绑定以两种方式工作。问题只存在于我自己的属性
vhTitle
。欢迎提出任何想法。

以下是一个工作示例:

一般情况下:侦听器对象应始终作为参数传递,而不是使用
bind

this.attachValueHelpRequest(this.onValueHelpRequest.bind(this),this
在我们的例子中:可以完全忽略侦听器:

this.attachValueHelpRequest(this.onValueHelpRequest)
然后,框架将当前事件提供程序(控件实例)作为侦听器对象传递,如API引用中所述:

如果未指定,则在事件提供程序的上下文中调用处理程序函数


为什么
.bind(这个)
有时不起作用 如果控件作为模板控件提供(例如,在问题中所示的
中),UI5将使用
克隆
API克隆该模板,其中还考虑了所有已注册的事件处理程序

init
中注册事件处理程序时,
this.onValueHelpRequest.bind(thisArg)
中的thisArg是模板控件,不是具有所有绑定的克隆实例。
更糟糕的是,
bind
不允许您更改之前传递的thisArg,即使框架随后根据使用不同的thisArg来调用函数(请参见注释2)


这会导致从模板中获取旧值,而不是从渲染克隆中获取实际值。

Many Thx。成功了。删除“.bind(this)”解决了问题。