Odata 如何将计数值绑定到单个属性?

Odata 如何将计数值绑定到单个属性?,odata,sapui5,Odata,Sapui5,我目前正在处理单个磁贴,希望从Northwind OData服务中添加一些计数值。该应用程序只包含一个视图和一个控制器 看法 控制器 sap.ui.define([ “sap/ui/core/mvc/Controller”, “sap/m/MessageToast”, “sap/ui/model/odata/v2/ODataModel” ],函数(控制器,MessageToast,ODataModel){ “严格使用”; 返回Controller.extend(“customtileapp.

我目前正在处理单个磁贴,希望从Northwind OData服务中添加一些计数值。该应用程序只包含一个视图和一个控制器

看法

控制器
sap.ui.define([
“sap/ui/core/mvc/Controller”,
“sap/m/MessageToast”,
“sap/ui/model/odata/v2/ODataModel”
],函数(控制器,MessageToast,ODataModel){
“严格使用”;
返回Controller.extend(“customtileapp.Controller.CustomTile1”{
onInit:function(){
this.oView=this.getView();
this.oModel=新的ODataModel(“/northwind/V2/northwind/northwind.svc”);
this.oView.setModel(this.oModel);
},
formatTile:function(){
var计数器;
此.oModel.read(“/Customers/$count”{
async:true,
成功:功能(oData,响应){
计数器=response.body;
MessageToast.show(计数器);
}
});
返回计数器;
}
});
});
格式化程序函数中的MessageToast工作正常,并显示正确的客户数量(
“91”
)。但是我想在磁贴上显示的数字总是显示
“0”


这是一种非常不同的方法来实现您想要实现的目标。然而,以下是我可以得到的一些信息:

  • 为什么格式化程序返回的值没有显示在绑定中? 答:这不会出现! 原因:视图中的绑定不会等待格式化程序函数返回值。默认情况下,在格式化程序中执行的读取请求为“异步”。 但是,即使它必须同步工作,您也可以尝试以下方法:

    formatTile:function(){ var计数器; this.oModel.read(“/Customers/$count)”,{async:true, 成功:功能(oData,响应){ 计数器=response.body; 返回计数器

    }})); }

  • 但这不会像读取那样工作,可能需要一段时间,绑定也不会等待

  • 更新$count通常用于列表和表标题中。它的工作原理如下(我也将其作为一种解决方法应用)
  • 应该有一个事件触发器(在我的示例中是onUpdate FinishedMaster),以便获得客户数量,然后可以更新NumericContent中的值

    控制器:
    sap.ui.define(['sap/m/MessageToast','sap/ui/core/mvc/Controller'],
    功能(MessageToast、控制器){
    “严格使用”;
    返回Controller.extend(“tilesGenericFiles.Controller.View1”{
    onInit:function(){
    this.oView=this.getView();
    this.oModel=new sap.ui.model.odata.v2.ODataModel(“/destinations/northwind/v2/northwind/northwind.svc/”,true);
    this.oView.setModel(this.oModel);
    },
    formatTile:函数(Scont){
    var计数器;
    此.oModel.read(“/Customers/$count”{
    async:true,
    成功:功能(oData,响应){
    计数器=response.body;
    返回计数器;
    MessageToast.show(童子军);
    }
    });
    返回“测试”;
    },
    onUpdateFinishedMaster:函数(oEvent){
    // 
    var计数,
    oTable=oEvent.getSource();
    var iTotalItems=oEvent.getParameter(“总计”);
    this.getView().byId(“idNumericContent”).setValue(iTotalItems);
    }
    });
    });
    视图:

    这是一种非常不同的方法来实现您想要实现的目标。然而,以下是我可以得到的一些信息:

  • 为什么格式化程序返回的值没有显示在绑定中? 答:这不会出现! 原因:视图中的绑定不会等待格式化程序函数返回值。默认情况下,在格式化程序中执行的读取请求为“异步”。 但是,即使它必须同步工作,您也可以尝试以下方法:

    formatTile:function(){ var计数器; this.oModel.read(“/Customers/$count)”,{async:true, 成功:功能(oData,响应){ 计数器=response.body; 返回计数器

    }})); }

  • 但这不会像读取那样工作,可能需要一段时间,绑定也不会等待

  • 更新$count通常用于列表和表标题中。它的工作原理如下(我也将其作为一种解决方法应用)
  • 应该有一个事件触发器(在我的示例中是onUpdate FinishedMaster),以便获得客户数量,然后可以更新NumericContent中的值

    控制器:
    sap.ui.define(['sap/m/MessageToast','sap/ui/core/mvc/Controller'],
    功能(MessageToast、控制器){
    “严格使用”;
    返回Controller.extend(“tilesGenericFiles.Controller.View1”{
    onInit:function(){
    this.oView=this.getView();
    this.oModel=new sap.ui.model.odata.v2.ODataModel(“/destinations/northwind/v2/northwind/northwind.svc/”,true);
    this.oView.setModel(this.oModel);
    },
    formatTile:函数(Scont){
    var计数器;
    此.oModel.read(“/Customers/$count”{
    async:true,
    成功:功能(oData,响应){
    计数器=response.body;
    返回计数器;
    MessageToast.show(童子军);
    }
    });
    返回“测试”;
    },
    onUpdateFinishedMaster:函数(oEvent){
    // 
    var计数,
    oTable=oEvent.getSource();
    var iTotalItems=oEvent.getParameter(“总计”);
    this.getView().byId(“idNumericContent”).setValue(iTotalItems);
    }
    });
    });
    视图:
    
    
      <NumericContent
        ...
        value="{= ${/Customers}.length }"
        ...
      />