我正在尝试将标签绑定到component.js中定义的模型的长度。我可以获得组件中的长度,但是当我尝试映射相同的内部视图时,它返回 undefined 。我已将表绑定到该模型,并且能够在表中获取数据。
这是我在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}"});
标签没有返回任何内容?
答案 0 :(得分:0)
当您声明MyJsonData
时,您的模型Label
尚不可用。
我尝试了一个类似的例子并观察了这个控制流程:
组件init()
- > view Controller - > setModel()
声明 - > requestCompleted
处理程序
因此,如果我绘制时间线,这就是我所看到的:
Label
没有可用的模型时,您的Component
会被实例化。number
属性的情况下创建的。number
属性添加到现有模型MyJsonData
。解决方案:
在视图的控制器和requestCompleted
处理程序中执行所有操作。
requestCompleted
事件异步工作,即允许在等待加载数据时进一步执行。因此,处理程序方法之外的任何语句都会在处理程序发挥其魔力之前执行。
注意:强>
controller.getOwnerComponent()
检索Component
的实例并在其上设置模型。oModel
是什么。您必须在setData
上致电this
。Label
的文本而不先将其添加到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
。
干杯!