我正在创建一个SplitApp。在其中,我已经通过MockServer设置了OData模型作为默认模型,该模型之前已经过测试并且可以正常工作。
当前显示的母版页眉上有一个搜索字段。正在调用搜索处理程序,并在其中设置列表的项绑定上的过滤器,但未调用模拟的后端。
调用oList.getBinding('items')返回未定义。我已经确定该绑定存在于列表mBindingInfos中,但是属性绑定是未定义的。尽管有一个模板和一个工厂属性。
如何正确应用过滤器,触发对模拟后端的调用?
我正在使用sapui5版本1.20.7。
这是该视图的一小段
<content>
<List id="listViagens"
items="{/ViagemCollection}"
mode="{device>/listMode}"
noDataText="Nenhuma viagem encontrada"
select="onSelect"
growing="true"
growingScrollToLoad="true">
<items>
<ObjectListItem
type="{device>/listItemType}"
press="onSelect"
title="{Matricula}">
</ObjectListItem>
</items>
</List>
</content>
这是事件处理程序
onSearch: function() {
var aFilters = [];
var sSearchValue = this.getSearchValue();
var oList = this.getListaViagens();
var oFilter;
if (sSearchValue && sSearchValue.length > 0) {
oFilter = new sap.ui.model.Filter("Matricula", sap.ui.model.FilterOperator.EQ, sSearchValue);
aFilters.push(oFilter);
}
oList.getBinding('items').filter(filters);
},
这是sap.m.List getBinding的定义...它返回undefined,因为this.mBindingInfos [sName] .binding是未定义的。
function (sName){
"use strict";
return this.mBindingInfos[sName] && this.mBindingInfos[sName].binding;
}
任何帮助将不胜感激。
最佳答案
提供绑定信息但未创建实际绑定时,可能有两个原因:
绑定信息不完整或不正确(例如拼写错误)。您可能需要仔细检查。
该模型不会传播到控件,因此,绑定信息无法解析为绑定对象。您可能想调用oList.getModel()
来检查模型是否已传播到控件中。
在上面提到的两件事之间的另一个潜在错误是命名模型的使用(即当您在某处执行this.setModel(oModel, "myModelName")
时)。在这种情况下,您可以通过以下方式从控件中获取模型: oList.getModel("myModelName")
。另外,在进行绑定时,您需要在绑定路径前添加模型名称,例如items="{myModelName>/ViagemCollection}"
。
最后但并非最不重要的一点是,您应该考虑升级SAPUI5运行时。最新发布的版本是1.26.x左右。您正在使用的版本(1.20.x)大约已经使用了一年。