我尝试在新版本的Openui5(1.48)上迁移我的应用程序,并且在模型绑定方面存在一些问题。我正在使用sap.ui.getCore().setModel(oModel, "local")
进行模型声明,当我尝试将某些控件绑定到此模型中的值时,如下所示:
<Text text="{local>/count}"/>
值未显示但如果我将获得此模型,请将其设置为在控制器中查看并从xml中删除>
var oModel = sap.ui.getCore().getModel("local");
this.getView().setModel(oModel);
XML
<Text text="{/count}"/>
一切都会好起来的。
也许有人遇到过类似的问题,或者我的代码有问题?
修改
我用 @boghyon
建议的解决方案解决了这个问题new sap.ui.core.ComponentContainer({
//...,
propagateModel: true
})
答案 0 :(得分:1)
我认为问题可能是你如何创建 JSON模型!,
试试这个。 控制器
sap.ui.define(["sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",],
function(Controller,JSONModel) {
"use strict";
return Controller.extend("com.stackoverflow.testUI5", {
onInit:function(){
var oData = {
count:"1"
};
var oModel = new JSONModel(oData);
sap.ui.getCore().setModel(oModel , "local")
//this.getView().setModel(oModel ,"local");
}
});
});
XML视图
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<mvc:View controllerName="com.stackoverflow.testUI5"
xmlns:mvc="sap.ui.core.mvc"
xmlns:core="sap.ui.core" xmlns="sap.m" >
<Text text="{local>/count}"/>
</mvc:View>
此代码段将有效。
答案 1 :(得分:1)
您必须在应用中使用Component
。在这种情况下,核心模型不会自动传播给ComponentContainer
的子项,这就是您的Text
控件不知道模型"local"
的原因。
"{/count}"
的工作原因是因为您在视图上显式设置了模型而没有任何模型名称。如果模型没有名称,则它是默认模型,并且必须在绑定路径中省略>
。
要详细了解设置模型的位置,请查看我对类似问题的回答:https://stackoverflow.com/a/42251431/5846045