JSONModel
)与服务器端模型(ODataModel
)混合,希望它们能够同步。[也许我不太了解this.getView().getModel().refresh(true)
或updateBindings
。。以某种方式它不能刷新模型,或者我的主要想法是错误的。我的意思是;我可以做一个变通办法来调用再次读取odata服务的函数,但这并不是很漂亮。因此,我在onInit
onInit: function () {
var that = this;
var oViewModel = new sap.ui.model.json.JSONModel({});
this.getView().setModel(oViewModel, "detailView");
sap.ui.getCore().setModel(oViewModel,"detailView");
var oFilter = [];
var zAppFilter = new sap.ui.model.Filter("XXX", sap.ui.model.FilterOperator.EQ, "XXXX");
oFilter.push(zAppFilter);
var oModel = that.getView().getModel();
oModel.setDefaultBindingMode("TwoWay");
oModel.read("/XXXXSet", {
filters: oFilter,
success: function (oData) {
that.getView().getModel("detailView").setData(oData.results);
},
// ...
});
},
我在视图中使用此"detailView"
-JSONModel模型进行绑定。可以。.现在,例如,[[添加或删除函数:
onDelete: function (oEvent) {
var that = this;
var oModel = this.getOwnerComponent().getModel();
var oSelectedItem = oEvent.getSource().getParent();
var oSourceID = oSelectedItem.getBindingContext("detailView").getObject().Zid;
oModel.remove("/XXX(XXX='XXX',XXXX='" + XXXX+ "')", {
method: "DELETE",
success: function(data) {
that.getView().getModel("detailView").refresh(true);
sap.ui.getCore().getModel("detailView").refresh(true);
},
// ...
});
},
那不起作用..但是为什么呢?我的意思是当我执行
updateBindings
或其他操作时。我是否了解或做错了什么?
什么refresh
不做正在获取新数据。
refresh
实际执行的操作(在JSONModel中)是告诉绑定它具有新数据。例如,这些绑定之一可以是sap.m.List
的项目。然后,列表知道需要重新渲染以显示新数据。 如果您不获取新数据并调用刷新,则不会发生任何事情。实际数据仍然相同。
我可以采取一种变通方法来调用一个读取老化的odata服务的函数,但这并不是真正的美满的事物
首先,当您已经拥有非常好的ODataModel时,使用额外的JSONModel并不是一件很漂亮的事情。如果只是删除JSONModel并将视图绑定到ODataModel,则视图将在调用remove
后自动更新。
<Table id="table0" items="{/XXXXSet}">
不要忘记从单元格中删除detailView
。>>
JSONModel
)与服务器端模型(ODataModel
)混合,希望它们能够同步。客户端模型和服务器模型是用于两个不同目的的两个独立模型。
客户端模型
JSONModel
的设备型号,它提供有关用户设备及其状态的信息。ResourceModel
为i18n的目的提供客户端可翻译的UI文本。不是
OData
或FHIR),应使用适当的服务器端模型代替。服务器端模型ODataModel
,具有服务器知道的优点。他们知道如何从后端系统获取,删除,更新,创建数据,甚至调用函数。它们可用于在客户端和服务器之间高效共享状态。如何?只需直接在绑定定义中使用服务器端模型。以OData作为默认模型,例如:
<List items="{
path: '/MyEntitySet',
filters: [
{
path: 'ThatProperty',
operator: 'EQ',
value1: 'something'
}
]
}"> <!-- given "MyEntitySet", "ThatProperty", "EntityTitle", and "EntityDesc" are defined in $metadata -->
<StandardListItem title="{EntityTitle}" description="{EntityDesc}" />
</List>
这将创建一个ODataListBinding
实例,该实例将使用以下URL向服务发送请求:
ODataListBinding
请求成功后,列表将相应显示实体。之后,当调用https://....svc/MyEntitySet?$filter=ThatProperty eq 'something'
时,相应的列表将自动刷新。
我是否了解或做错了什么?
是。在这种情况下,具有中间myODataModel.remove(...);
是一种常见的反模式,因此维护成本很高。尝试仅使用JSONModel
。该框架将为您完成工作。
JSONModel
)与服务器端模型(ODataModel
)混合,希望它们能够同步。