SAPUI5 列表绑定与 XML 视图中的过滤数据

Posted

技术标签:

【中文标题】SAPUI5 列表绑定与 XML 视图中的过滤数据【英文标题】:SAPUI5 List binding with filtered data in XML view 【发布时间】:2016-12-25 13:35:40 【问题描述】:

希望你一切顺利

目前我正在尝试在控制器的 oninit 事件中将过滤后的数据绑定到 xml 视图中的列表控件,odata 服务 url 是这样的

http://mikmo.mylocalhost.com/MIKMOWCFDataService.svc/view_VendorGroup?$filter=VendorID%20eq%201

我使用了下面的代码

var sListURI = "http://mikmo.mylocalhost.com/MIKMOWCFDataService.svc";
        var oListModel = new sap.ui.model.odata.ODataModel(sListURI, false);
        var oListModelJson = new sap.ui.model.json.JSONModel();
        oListModel.oHeaders = 
            "DataServiceVersion": "2.0",
            "MaxDataServiceVersion": "2.0"
        ;
        oListModel.read("/view_VendorGroup", null, ["$filter=VendorID eq " + window.VendorID], null, function(oData, oResponse) 
            oListModelJson.setData(oData);
            oListModelJson.loadData(oData);

        , null);

        //oListModelJson.bindList(sPath, [oContext], [aSorters], [aFilters], [mParameters])
        oListModelJson.attachRequestCompleted(function(oData, oEvent) 

        );
        myList.setModel(oListModelJson, "VendorGroups");

在 XML 视图中

<List growing="true" growingThreshold="100" headerText="i18n&gt;businessareas" id="lstVendorGroups">
                            <items>
                                <!--<ObjectListItem title="VendorGroups>GroupName" type="Active" press=".onItemSelected" />  -->
                                <StandardListItem id="stListItem" />
                            </items>
                        </List>

我需要知道的是如何将attachRequestCompleted方法中的列表项与数据绑定 在此先感谢

【问题讨论】:

【参考方案1】:

您需要绑定 sap.m.List 的聚合“项目”。 我会在您的代码中修改以下内容:

    oDataModel 的读取方法:使用 oDataModel 执行读取操作后,您将获得在本地 JSON 模型中设置数据的成功处理程序。代码行:oListModelJson.loadData(oData); 不是必需的,因为上一行代码是:oListModelJson.setData(oData); - 已经将数据设置为您的本地 JSON 模型。

    JSON 模型的 AttachRequestCompleted:我不会使用此方法,因为它在您将数据(通过 AJAX 调用)直接加载到 JSON 模型时使用。但是在这里,当您使用 oData 模型进行获取时,它不是必需的。所以我将删除处理程序。

    在您的 XML 视图中,您需要告诉 sap.m.List,即您的对象数组所在的路径。考虑到您已应用过滤器,您的 JSON 模型将包含以“结果”关键字开头的数据。如果以下代码没有帮助,请粘贴您的 JSON 模型数据:

XML 中的代码:

<List growing="true" growingThreshold="100" headerText="i18n&gt;businessareas" id="lstVendorGroups" items="VendorGroups>/results">
                            <items>
                                <!--<ObjectListItem title="VendorGroups>GroupName" type="Active" press=".onItemSelected" />  -->
                                <StandardListItem id="stListItem" />
                            </items>
                        </List>

修改后Controller中的代码:

var sListURI = "http://mikmo.mylocalhost.com/MIKMOWCFDataService.svc";
        var oListModel = new sap.ui.model.odata.ODataModel(sListURI, false);
        var oListModelJson = new sap.ui.model.json.JSONModel();
        oListModel.oHeaders = 
            "DataServiceVersion": "2.0",
            "MaxDataServiceVersion": "2.0"
        ;
        oListModel.read("/view_VendorGroup", null, ["$filter=VendorID eq " + window.VendorID], null, function(oData, oResponse) 
            oListModelJson.setData(oData);
           // oListModelJson.loadData(oData);

        , null);

        //oListModelJson.bindList(sPath, [oContext], [aSorters], [aFilters], [mParameters])
        //oListModelJson.attachRequestCompleted(function(oData, oEvent) 
        //
        //);
        this.byId('lstVendorGroups').setModel(oListModelJson, "VendorGroups");

【讨论】:

亲爱的 Rahul 感谢您的回复这是 JSONMODEL 日志结果的结果: Array[3] 0 : Object GroupName : "Abortion Policy/Pro-Abortion Rights" VendorGroupID : 1 VendorID : 1 metadata : Object __proto : Object 1 : Object 2:对象 你能告诉我你是如何在控制器代码中获取 myList 的吗?另外,您是否更新了您的 XML 代码? 我已经更新了我的控制器代码:请使用:this.byId('lstVendorGroups').setModel(oListModelJson, "VendorGroups"); ,其中使用了myList.setModel(oListModelJson, "VendorGroups");

以上是关于SAPUI5 列表绑定与 XML 视图中的过滤数据的主要内容,如果未能解决你的问题,请参考以下文章

SAPUI5 将数组行索引绑定到 xml 视图中的数组行数据

SAPUI5:是否可以在绑定过滤器中执行嵌套绑定

SAPUI5 多重聚合绑定

从 xml 视图 SAPUI5 复制列表项

SAPUI5绑定JSON模型来控制

SAPUI5:更改 url 中的 id 后如何重定向到 NotFound 页面?