将标签绑定到sapui5中的模型长度
我试图将标签绑定到component.js中定义的模型长度。我可以在组件中获取长度,但当我尝试映射相同的内部视图时,它返回未定义的。我已经将表绑定到该模型,并且能够获取表中的数据 这是我在component.js中的代码将标签绑定到sapui5中的模型长度,sapui5,Sapui5,我试图将标签绑定到component.js中定义的模型长度。我可以在组件中获取长度,但当我尝试映射相同的内部视图时,它返回未定义的。我已经将表绑定到该模型,并且能够获取表中的数据 这是我在component.js中的代码 var oModel = new sap.ui.model.json.JSONModel("model/data.json"); var datacount ; oModel.attachRequestCompleted(function() { // console
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开始就可用。是的,一旦您的型号可用,标签应该会更新,不是吗?