如何在事件处理程序中刷新ODataModel

时间:2015-02-25 20:03:46

标签: javascript sapui5

我正在创建一个SplitApp。在其中,我已经通过MockServer将OData模型设置为默认模型,该模型已经过测试并且正常工作。

当前显示的母版页在标题上有一个搜索字段。正在调用搜索处理程序,其中我在List的项目绑定上设置了一个过滤器,但是没有调用模拟的后端。

对oList.getBinding(' items')的调用返回undefined。我已经知道绑定存在于列表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;
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

当提供绑定信息但未创建实际绑定时,可能有两个原因:

  1. 绑定信息不完整或不正确(例如拼写错误)。您可能需要仔细检查一下。
  2. 模型不会传播到控件,因此绑定信息无法解析为绑定对象。您可能需要调用oList.getModel()来检查模型是否已传播到您的控件。
  3. 另一个潜在的错误,在上面提到的两件事之间的某个地方是使用命名模型(当你在某处做this.setModel(oModel, "myModelName")时)。在这种情况下,您可以从控件获取模型,例如oList.getModel("myModelName")。此外,在进行绑定时,您需要在绑定路径前加上模型名称,例如: items="{myModelName>/ViagemCollection}"

    最后但同样重要的是,您应该考虑升级SAPUI5运行时。最新发布的版本大约是1.26.x.您使用的版本(1.20.x)大约有一年的时间。