Javascript 如何从模型中获取ODATA值并将其显示在消息框中

Javascript 如何从模型中获取ODATA值并将其显示在消息框中,javascript,sapui5,Javascript,Sapui5,我已经创建了一个对Northwind数据库的ODATA调用,我一直在玩绑定,并且有一些我无法解决的问题 在这个特定的示例中,当我单击Login时,它将在文本框中显示值,并打开一个messagebox来显示相同的值,但我第一次单击它时,它不会显示任何内容。在第二次工作之后。 为什么会这样 另一个问题是,如果我可以动态更改文本框的绑定,而不是使用{CompanyName},我希望获得ContactName,但当我使用SETVALUE时,它将打印文本{ContactName}。再次感谢 这是使用Su

我已经创建了一个对Northwind数据库的ODATA调用,我一直在玩绑定,并且有一些我无法解决的问题

在这个特定的示例中,当我单击Login时,它将在文本框中显示值,并打开一个messagebox来显示相同的值,但我第一次单击它时,它不会显示任何内容。在第二次工作之后。 为什么会这样

另一个问题是,如果我可以动态更改文本框的绑定,而不是使用{CompanyName},我希望获得ContactName,但当我使用SETVALUE时,它将打印文本{ContactName}。再次感谢

这是使用Success方法的新代码:
我不太明白您的意图,因为您在“getLogin”函数中所做的是:

  • 按id获取输入控件并进行元素绑定(到特定客户)。在xml视图中,您将输入的值绑定到“CompanyName”属性(相对),这就是为什么单击“登录”按钮后,输入会自动填充为“Alfred Futterkiste”-客户“ALFKI”的公司名称
  • 在下一行代码中,您尝试获取“CompanyName”属性,并获取空消息框,这是正确的,因为当时绑定没有从后端加载数据(因为通常所有HTTP请求都是异步的,所以需要等待一段时间,直到加载数据)
  • 为此,请在需要时使用回调。 因此,您的函数将如下所示:

    getLogin: function(evt) {
        var oModel = this.getView().getModel();
        this.byId("txtUid").bindElement({
            path: "/Customers('ALFKI')",
            events: {
                dataReceived: function(oResponse) {
                    sap.m.MessageBox.alert(oModel.getProperty("/Customers('ALFKI')/CompanyName"));
                }
            }
        });
    
        this.getView().getModel().read("/Customers('ANATR')", {
    
            success: function(oResponse) {
                sap.m.MessageBox.alert(oModel.getProperty("/Customers('ANATR')/CompanyName"));
            }
    
        });
    }
    

    至于第二个问题,您可以通过编程方式使用该方法。

    谢谢!我理解这个概念,我刚刚修改了bin,但正如您所看到的,弹出窗口从未显示,就像从未调用success方法一样。我错过什么了吗?this.getView().getModel().read(“/Customers('ANATR')”,{events:{success:function(orresponse){sap.m.MessageBox.alert(this.getView().getModel().getProperty(“/Customers('ANATR')/CompanyName”);});对于第二个问题,我想用{ContactName}替换{CompanyName}的txtUid字段值,但在txtUid中找不到用代码更新该参数的方法。谢谢我编辑了我的答案,因为我使用了错误的绑定API。现在应该可以了。“dataReceived”回调将执行此任务。在jsBin中,您在回调上下文中丢失了“this”,所以要么使用“var that=this”技术,要么在函数作用域的开头保存所需的变量,就像我对“oModel”所做的那样。接收的数据是为了绑定和使用READ读取模型时的成功,我希望我得到了正确的结果。
    getLogin: function(evt) {
        var oModel = this.getView().getModel();
        this.byId("txtUid").bindElement({
            path: "/Customers('ALFKI')",
            events: {
                dataReceived: function(oResponse) {
                    sap.m.MessageBox.alert(oModel.getProperty("/Customers('ALFKI')/CompanyName"));
                }
            }
        });
    
        this.getView().getModel().read("/Customers('ANATR')", {
    
            success: function(oResponse) {
                sap.m.MessageBox.alert(oModel.getProperty("/Customers('ANATR')/CompanyName"));
            }
    
        });
    }