SAPUI5 TwoWay Binding to XMLModel with button Custom Data 属性 不更新模型
SAPUI5 TwoWay Binding to XMLModel with button Custom Data property not updating model
我在更新 sap.ui.model.xml.XMLModel
的值时遇到了很大的问题。
它由 TwoWay 绑定 到 Button 控件的 XMLModel
和自定义数据 。
在 JS 代码中更新 Custom Data 值不会更新 XMLModel
,因此按钮描述、List Item 的优先级等不会改变。
我不知道了,所以请帮助
我更新自定义数据的部分 JS 代码(这是按钮调用的方法)- 这有效:
oEvent.getSource().data("Przeczytane", "true");
XML 查看:
<List id="notificationList"
class="sapContrast sapContrastPlus"
items="{path: 'InfoNotif>/soap-env:Body/n0:ReadAdminMessageResponse/Dane/ListaKomunikatowAdministratora/KomunikatAdministratora'}">
<NotificationListItem title="{InfoNotif>Tytul/text()}"
description="{InfoNotif>Opis/text()}"
showCloseButton="false"
datetime="{InfoNotif>DataPublikacji/text()}"
unread="false"
close="onItemClose"
authorName="{InfoNotif>IdUzytkownikaSystemu/text()}"
authorPicture="sap-icon://group"
priority="{=${InfoNotif>Przeczytano/text()}==='true' ? 'None' : 'High'}">
<buttons>
<Button text="{=${InfoNotif>Przeczytano/text()}==='true' ? 'Oznacz jako nieprzeczytane' : 'Oznacz jako przeczytane'}"
type="Accept"
app:IdKomunikatuAdmin="{InfoNotif>IdKomunikatu/text()}"
app:IdProcesuAdmin="{InfoNotif>/****/IdKomunikatu/text()}"
app:Przeczytane="{ path: 'InfoNotif>Przeczytano', mode: 'sap.ui.model.BindingMode.TwoWay', type: 'sap.ui.model.type.String' }"
press=".onAcceptInfoPress"/>
</buttons>
</NotificationListItem>
</List>
结果是:
- 自定义数据新值设置正确
XMLModel
中的值未设置
- 绑定到
/Przeczytano/text()
的其他控件 未更新
我以前没有使用过 XMLModel
,但我尝试创建 a small sample。
直接修改第一栏的Input
或者按第二栏的Button
就可以看到效果了
如果删除 text()
语句,似乎双向绑定工作(更好)(然后它看起来也更像其他模型,更容易用 JSON/OData 替换它) .
然后我扩展了示例,看看是否可以在 JS 代码中修改模型。并且(就像常规模型一样)如果您使用 setProperty
修改模型并且不要尝试直接修改控件,则效果最佳。
如果您使用 oBindingContext.getObject(...)
访问 属性,您必须将 text()
添加到路径 (oContext.getObject("text1/text()")
) 或从结果(oContext.getObject("text1").textContent
)。这也使得用 JSON/ODataModel 替换它变得更加困难,所以我改用 oModel.getProperty(...)
。
我在更新 sap.ui.model.xml.XMLModel
的值时遇到了很大的问题。
它由 TwoWay 绑定 到 Button 控件的 XMLModel
和自定义数据 。
在 JS 代码中更新 Custom Data 值不会更新 XMLModel
,因此按钮描述、List Item 的优先级等不会改变。
我不知道了,所以请帮助
我更新自定义数据的部分 JS 代码(这是按钮调用的方法)- 这有效:
oEvent.getSource().data("Przeczytane", "true");
XML 查看:
<List id="notificationList"
class="sapContrast sapContrastPlus"
items="{path: 'InfoNotif>/soap-env:Body/n0:ReadAdminMessageResponse/Dane/ListaKomunikatowAdministratora/KomunikatAdministratora'}">
<NotificationListItem title="{InfoNotif>Tytul/text()}"
description="{InfoNotif>Opis/text()}"
showCloseButton="false"
datetime="{InfoNotif>DataPublikacji/text()}"
unread="false"
close="onItemClose"
authorName="{InfoNotif>IdUzytkownikaSystemu/text()}"
authorPicture="sap-icon://group"
priority="{=${InfoNotif>Przeczytano/text()}==='true' ? 'None' : 'High'}">
<buttons>
<Button text="{=${InfoNotif>Przeczytano/text()}==='true' ? 'Oznacz jako nieprzeczytane' : 'Oznacz jako przeczytane'}"
type="Accept"
app:IdKomunikatuAdmin="{InfoNotif>IdKomunikatu/text()}"
app:IdProcesuAdmin="{InfoNotif>/****/IdKomunikatu/text()}"
app:Przeczytane="{ path: 'InfoNotif>Przeczytano', mode: 'sap.ui.model.BindingMode.TwoWay', type: 'sap.ui.model.type.String' }"
press=".onAcceptInfoPress"/>
</buttons>
</NotificationListItem>
</List>
结果是:
- 自定义数据新值设置正确
XMLModel
中的值未设置- 绑定到
/Przeczytano/text()
的其他控件 未更新
我以前没有使用过 XMLModel
,但我尝试创建 a small sample。
直接修改第一栏的Input
或者按第二栏的Button
就可以看到效果了
如果删除 text()
语句,似乎双向绑定工作(更好)(然后它看起来也更像其他模型,更容易用 JSON/OData 替换它) .
然后我扩展了示例,看看是否可以在 JS 代码中修改模型。并且(就像常规模型一样)如果您使用 setProperty
修改模型并且不要尝试直接修改控件,则效果最佳。
如果您使用 oBindingContext.getObject(...)
访问 属性,您必须将 text()
添加到路径 (oContext.getObject("text1/text()")
) 或从结果(oContext.getObject("text1").textContent
)。这也使得用 JSON/ODataModel 替换它变得更加困难,所以我改用 oModel.getProperty(...)
。