我想将值传递给标签消费odata

时间:2014-08-25 13:11:32

标签: javascript odata sapui5

因为声明的变量(idno,namecity)在括号内,所以我无法访问它们。这是获取价值的方式,还是最好的方式。谢谢

<script>
    var app = sap.m.App("myApp",{});
    var url = "proxy/http/server/ZCUST_TESTING_SRV /?$filter=IKunnr eq '800COL101'";
    var username = "mobtest";
    var password = "welcome1";
    var oModel = new sap.ui.model.odata.ODataModel(url, true, username, password);  
    oModel.read('/', null, null, true, function(oData, oResponse)
    {
            var dataget = JSON.stringify(oData);        
            var count = oData.results[0].Ort01;
            var namecity= oData.results[0].Name1;
            var idno= oData.results[0].Kunnr;   
    });                 
    var l4 = new sap.m.Label("l4",{text: count});
    var l5 = new sap.m.Label("l5",{text: namecity});
    var l6 = new sap.m.Label("l6",{text: idno});        

    var page = new sap.m.Page("page",{
                title:"Address Details",
                showNavButton:true,
                navButtonTap: function(){
                    //app.back();
                    app.to("Page");
                },
                content: [ l4,l5,l6, new sap.m.Button({text:"submit" }})]
    });
    app.addPage(page);
    app.placeAt('content');
</script>

2 个答案:

答案 0 :(得分:1)

根据您对问题的评论中的讨论,我为您提供了一个更恰当地使用ODataModel的示例,而不是与之抗争,不必进行显式读取,而不是直接访问results属性,而不是手动捕获检索到的数据并将其放入新的JSON模型中。

基本上,实例化ODataModel,在控件属性上使用绑定语法,并设置适当的绑定上下文,以便相对路径解析。

Here's the JS Bin example。我用XML编写了UI控件,因为它更干净,并且使用了Northwind模型,但是试图保持原始目标。

以下是该示例的一些片段:

  <App>
    <Page
      binding="{/Employees(1)}"
      title="Address Details"
      showNavButton="true">
      <content>
        <Label text="{TitleOfCourtesy}" />
        <Label text="{FirstName}" />
        <Label text="{LastName}" />
      </content>
    </Page>
  </App>

请注意页面上的绑定以及标签文本属性中的绑定。

oView
  .setModel(new sap.ui.model.odata.ODataModel(
        "http://cors-anywhere.herokuapp.com/http://services.odata.org/V3/Northwind/Northwind.svc/",
        {
          json : true,
          maxDataServiceVersion : "2.0"
        }
      ))

注意ODataModel的设置方式,并注意没有任何read()调用,没有任何回调成功处理程序试图捕获和存储数据,以及缺少任何帮助JSON模型。 (另外,我使用非常有用的cors-anywhere服务,因此我们可以查看远程OData服务的示例,而无需使用代理等。)

答案 1 :(得分:0)

你得到回调之外的count,namecity和其他变量为&#34; undefined&#34;因为在OData调用成功完成后调用了回调函数,并且那些变量仅在那时设置。您应该在回调中执行UI呈现逻辑,最佳做法是使用数据绑定。

例如,您的JSON字符串如下:

{
"results":
      [
        {
           "Ort01":"1",
           "Name1":"2",
           "Kunnr": "3"
        }
      ]
}

数据绑定如下:

var oModel = new sap.ui.model.odata.ODataModel(url, true, username, password);  

var l4 = new sap.m.Label("l4",{text: "{/results/0/Ort01}"}); 
// {/results/0/Ort01} is the binding path
var l5 = new sap.m.Label("l5",{text: "{/results/0/Name1}"});
var l6 = new sap.m.Label("l6",{text: "{/results/0/Kunnr}"});        

var page = new sap.m.Page("page",{
            title:"Address Details",
            showNavButton:true,
            navButtonTap: function(){
                //app.back();
                app.to("Page");
            },
            content: [ l4,l5,l6, new sap.m.Button({text:"submit" }})]});
app.addPage(page);
app.placeAt('content');

oModel.read('/', null, null, true, function(oData, oResponse)
{
        //Data binding
        var oModel = new sap.ui.model.json.JSONModel();
        oModel.setData(oData);
        page.setModel(oModel);        

});                 

这是你的出发点。有关详细信息,请参阅documentation并阅读demo apps的代码。

此致 阿伦