绑定元素以控制SAPUI5

时间:2017-05-04 04:23:11

标签: odata sapui5

我试图在XML视图上显示由Odata Model检索的一些数据。 在Component.js中,我创建了一个带有服务Url的模型,它照常工作。

    var oDataModel = new sap.ui.model.odata.v2.ODataModel("http://server:port/sap/opu/odata/SAP/ZWYMB_SRV", {
            user:"abapleader",
            password: "TH123456789a@",
            headers: {
                "sap-client": 300
            },
            useBatch:false
        });          
        this.setModel(oDataModel, "oDataModel");

到目前为止,我已设法使用model.read()函数获取数据。

现在我需要显示详细视图。我的onInit事件代码如下:

            this.router.getRoute("zwm01detail").attachPatternMatched(this._onObjectMatched.bind(this));

        },
        _onObjectMatched: function(oEvent) {
            var that = this;
        var MaWorkDoc = oEvent.getParameter("arguments").MaWorkDoc;
            this.getModel("oDataModel").metadataLoaded().then(function() {
                var sPath = that.getModel("oDataModel").createKey("/WorkDocList", {
                    MaWorkDoc: MaWorkDoc,
                    Pernr: "0001"
                });
                console.log(sPath);
                that.getView().bindElement({
                    path:sPath
                });
            });

我使用sPath打印console.log(sPath):/ WorkDocList(MaWorkDoc =' 1110000001',Pernr =' 0001'),我认为,是正确的。我还使用这条路径实现并测试了后端,基本上一切都很好。但我不知道为什么我无法在视图上显示数据。

Detail.view.xml:

<Text text="{/MaWorkDoc}" maxLines="0"/>

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我认为细节绑定代码不应该在.metadataLoaded处理程序中。相反,它应该直接在_onObjectMatched中。

我的意思是这样的。

 _onObjectMatched: function(oEvent) {
        var that = this;
        var MaWorkDoc = oEvent.getParameter("arguments").MaWorkDoc;
        var sPath = that.getModel("oDataModel").createKey("/WorkDocList", {
                MaWorkDoc: MaWorkDoc,
                Pernr: "0001"
            });
            console.log(sPath);
            that.getView().bindElement({
                path:sPath
            });
        }  

答案 1 :(得分:0)

因为您已为模型命名,所以您需要在绑定中使用该名称。即<Text text="{oDataModel>/MaWorkDoc}" maxLines="0"/>

答案 2 :(得分:0)

所以我一直在处理文档,并发现有model参数有帮助。

更具体地说,我在model中添加声明view.bindElement,如下所示:

that.getView().bindElement({
                    path:sPath,
//** oDataModel = name of the model
                    model: "oDataModel"
                });

如果有更好的解决方案,我很高兴知道。谢谢。!