Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将标签绑定到sapui5中的模型长度_Sapui5 - Fatal编程技术网

将标签绑定到sapui5中的模型长度

将标签绑定到sapui5中的模型长度,sapui5,Sapui5,我试图将标签绑定到component.js中定义的模型长度。我可以在组件中获取长度,但当我尝试映射相同的内部视图时,它返回未定义的。我已经将表绑定到该模型,并且能够获取表中的数据 这是我在component.js中的代码 var oModel = new sap.ui.model.json.JSONModel("model/data.json"); var datacount ; oModel.attachRequestCompleted(function() { // console

我试图将标签绑定到component.js中定义的模型长度。我可以在组件中获取长度,但当我尝试映射相同的内部视图时,它返回未定义的。我已经将表绑定到该模型,并且能够获取表中的数据

这是我在component.js中的代码

var oModel = new sap.ui.model.json.JSONModel("model/data.json");
var datacount ;
oModel.attachRequestCompleted(function() {
     // console.log(this.getData().length);
     datacount = this.getData().length; //I am able to get length here
    oModel.setData({
        struct : this.getData(),
        number: datacount
    });
});
this.setModel(oModel, "MyJsonData");
内部视图:

oTable.bindRows("MyJsonData>/struct/");
var lbl = new sap.ui.commons.Label({text: "{MyJsonData>/number}"});

标签没有返回任何内容?

当您声明
标签时,您的型号
MyJsonData
尚不可用


我尝试了一个类似的例子,并观察到这个控制流:

组件
init()
->查看控制器->
setModel()
语句->
requestCompleted
handler

如果我画一个时间线,我会看到:

  • 组件
    没有可用的模型时,您的
    标签将被实例化
  • 创建模型时不使用
    number
    属性
  • number
    属性添加到现有模型
    MyJsonData
  • 解决方案:

    在视图的控制器和
    requestCompleted
    处理程序中执行所有操作

    requestCompleted
    事件异步工作,即在等待加载数据时允许进一步执行。因此,处理程序方法之外的任何语句都将在处理程序发挥其魔力之前执行

    注意:

    • 您可以使用
      controller.getOwnerComponent()
      检索
      组件的实例,并在其上设置模型
    • 您的事件处理程序不知道什么是
      oModel
      。您必须在此
    上调用
    setData
  • 如果您试图检索
    标签的文本,而不首先将其添加到UI DOM中,那么请确保显式地将模型绑定到它
  • 换言之:

    var lbl = new sap.ui.commons.Label({
        text: "{MyJsonData>/number}"
    });
    console.log(lbl.getText());
    
    无法工作,因为您尚未将
    lbl
    添加到视图中,因此它无法访问模型。但是,如果您执行以下操作,它肯定会在浏览器控制台中打印文本:

    var lbl = new sap.ui.commons.Label({
        text: "{MyJsonData>/number}"
    }).setModel(oModel, "MyJsonData");
    
    最后,没有人再使用
    sap.ui.commons
    。我建议您切换到
    sap.m


    干杯

    返回语法错误:“应为”“而不是”‌'"将上述代码更新为var lbl=new sap.ui.commons.Label({text:{path:'MyJsonData>/number'},type:'sap.ui.model.type.Integer'});没有错误,但Label仍然不起作用尝试在模型上使用setProperty而不是setData(需要两个调用,一个用于struct,一个用于number)两个调用不是一个好的解决方案,我想,一个调用应该可以工作。我可以等待它加载。感谢您的详细解释。问题是我使用的是1.28和controller.getOwnerComponent()仍然不支持。其次,如果我在init controller中声明模型,一切正常,但这不是建议的用法。我希望使用组件中定义的模型。对于“当您声明标签时,您的模型MyJsonData还不可用。”“。我可以等待-一旦加载模型,则标签应该更新-类似于表控件的情况。贾斯汀,很抱歉这么晚才回复。在SDK文档中,我看到
    getOwnerComponent()
    从v1.23开始就可用。是的,一旦您的型号可用,
    标签应该会更新,不是吗?