为什么我不能在其他函数中使用这些
sap.ui.getCore().setModel(oModel) and this.getView().setModel("oModel","someModel")
比sapui5中控制器的生命周期钩子。我试图将模型绑定到我的视图的控件而不给它 一个身份证。所以我想制作一个模型并将该模型设置为视图所在的位置 我会绑定。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="UTF-8">
<title>Handler Context in JavaScript Views</title>
<script id="sap-ui-bootstrap"
type="text/javascript"
src="https://sapui5.netweaver.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-libs="sap.m"
data-sap-ui-xx-bindingSyntax="complex"
>
</script>
<script>
jQuery.sap.require("sap.m.MessageToast");
sap.ui.jsview("local.view", {
getControllerName: function() {
return "local.controller";
},
createContent: function(oController) {
var oText=new sap.m.Text();
oText.bindProperty("text","oModel>/myData");
var oInput=new sap.m.Input();
oInput.bindValue("oModel>/myData");
var oIn=new sap.m.Input();
oIn.bindValue("oModel>/myData");
var oBar=new sap.m.Bar({contentLeft:oIn,contentMiddle:oText});
var oButton=new sap.m.Button({text:"press to reset",
press:function(){
oController.resetModel();
}
});
var oPage=new sap.m.Page({headerContent:[oInput],footer:oBar,showNavButton:true,content:[oButton]});
var oShell=new sap.m.App({pages:oPage});
return oShell;
}
});
sap.ui.controller("local.controller", {
onInit:function(){
var aData={"myData":"enter!!"};
var oModel=new sap.ui.model.json.JSONModel();
oModel.setData(aData);
sap.ui.getCore().setModel(oModel,"oModel");
},
resetModel:function(){
var oModel=sap.ui.getCore().getModel("oModel");
oModel.oData.myData="Reset";
}
});
sap.ui.view({
type: sap.ui.core.mvc.ViewType.JS,
viewName: "local.view"
}).placeAt("uiArea");
</script>
</head>
<body class="sapUiBody" role="application">
<div id="uiArea"></div>
</body>
</html>
如何更新按下按钮
上绑定到其他控件的模型有没有办法在我的视图的控制器中访问控件而不给它一个id?
问候,
Ajaay
答案 0 :(得分:4)
您正在更新模型。
请记住,您永远不会使用内部<yourModel>.oData.<yourProperty> = <whatever>
,而是始终使用:
<yourModel>.setProperty("<propertyName>", <value>)
。
这样您就可以确定您的模型将使用新值
将resetModel方法更改为
resetModel:function(){
var oModel=sap.ui.getCore().getModel("oModel");
oModel.setProperty("/myData", "Reset");
}
它会起作用
答案 1 :(得分:1)
你在这里提出了很多问题,所以让我分解一下
为什么我不能使用这些sap.ui.getCore()。setModel(oModel)和 this.getView()。setModel(“oModel”,“someModel”)在sapui5中控制器的生命周期钩子以外的函数中。 - 你可以访问它们
我不确定您在使用sap.ui.getCore().setModel(oModel)
时遇到问题的确切位置,但对于this.getView().setModel("oModel","someModel")
我可以说@fabiopagoti评论了什么,您可能在错误的上下文中使用它。
这是一个例子,
onInit : function()
{
/* 'this' refers to the controller here,
*/
var oController = this;
myOwnFunction : function()
{
/* 'this' now refers to the scope inside 'onInit'
Therefore this.getView().setModel() won't work.
oController.getView().setModel() will work. */
}
}
有没有办法在我的视图的控制器中访问控件而不给它一个ID? - 是,只有当View是JavaScript视图时< / p>
在 view.js 中,而不是将变量声明为
var oVariable;
声明为,
this.oVariable;
您需要在 controller.js (在控制器的上下文中)访问变量的任何地方访问变量,
this.getView().oVariable;
如何更新按下按钮时绑定到其他控件的模型
resetModel:function()
{
var oModel=sap.ui.getCore().getModel("oModel");
oModel.setProperty("/myData", "Reset" );
}
setProperty文档为here