Sapui5 Can';无法从attachPropertyChange获取已更改的属性
我想知道中的哪个属性在被视图修改时发生了更改。 对于测试,我进行了OpenUI5演练,并在应用程序控制器中添加了以下行Sapui5 Can';无法从attachPropertyChange获取已更改的属性,sapui5,Sapui5,我想知道中的哪个属性在被视图修改时发生了更改。 对于测试,我进行了OpenUI5演练,并在应用程序控制器中添加了以下行 oProductModel.attachPropertyChange( function(oEvent){ console.log("event: ", oEvent); }, this); 当我在文本输入中更改属性时,会调用attachPropertyChange中的函数,但当我在控制台中打印oEvent对象时,它是空的 我知道我可以连接到文本输入更改事件,但我想使
oProductModel.attachPropertyChange( function(oEvent){
console.log("event: ", oEvent);
}, this);
当我在文本输入中更改属性时,会调用attachPropertyChange中的函数,但当我在控制台中打印oEvent对象时,它是空的
我知道我可以连接到文本输入更改事件,但我想使用attachPropertyChange,以防同一模型有多个视图。您可以对UI中的所有输入字段使用更改事件,并在控制器中写入事件处理方法。您将很容易在事件处理方法的oEvent中获得属性和值。我希望您能理解。据我所知,您希望避免使用输入控件的
change
事件,因为没有关于模型中哪个属性已更改的信息。但是,您仍然可以通过以下方式在更改处理程序中获取所有这些信息:
获取绑定属性的名称,或event.getSource().getBinding(/*controlPropertyName*/).getPath()
获取绑定上下文的路径。此处的event.getSource().getBindingContext(/*modelName*/).getPath(/*suffix*/)
等待附加到上下文路径的可选后缀getPath
onInputChange: function(event) {
const input = event.getSource();
const property = input.getBinding("value").getPath(); // "myProperty"
const absolutePath = input.getBindingContext().getPath(property) // "/0/myProperty"
},
演示
sap.ui.getCore().attachInit(()=>sap.ui.require([
“sap/ui/model/json/JSONModel”,
“sap/m/MessageToast”,
],(JSONModel,MessageToast)=>sap.ui.xmlview({
查看内容:`
`,
控制器:{
onChange:函数(事件){
这是showPropertyInfo({
bindingContext:event.getSource().getBindingContext(“myModel”),
propertyPath:event.getSource().getBinding(“值”).getPath(),
of:event.getSource(),
});
},
showPropertyInfo:({propertyPath,bindingContext,of})=>MessageToast.show(
`属性:“${bindingContext?propertyPath:propertyPath.substr(1)}”
绝对路径:“${bindingContext?bindingContext.getPath(propertyPath):propertyPath}”`{
持续时间:999999,
宽度:“18rem”,
在“底端”,
属于
}),
},
async:true,
}).setModel(新的JSONModel({
产品:[{
产品ID:“”,
}, {
产品ID:“”,
}, {
产品ID:“”,
}],
}),“myModel”).placeAt(“内容”)代码>
我在xml定义()中添加了change callback,但是callback PrintEvent中的事件对象不包含关于模型中哪个属性已更改的信息。