如何将控件绑定到sapui中的json模型

时间:2014-11-20 12:28:15

标签: sapui5

  

为什么我不能在其他函数中使用这些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

2 个答案:

答案 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)

你在这里提出了很多问题,所以让我分解一下

  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. */ } }

  2. 有没有办法在我的视图的控制器中访问控件而不给它一个ID? - ,只有当View是JavaScript视图时< / p>

    view.js 中,而不是将变量声明为

    var oVariable;

    声明为,

    this.oVariable;

    您需要在 controller.js (在控制器的上下文中)访问变量的任何地方访问变量,

    this.getView().oVariable;

  3. 如何更新按下按钮时绑定到其他控件的模型

    resetModel:function() { var oModel=sap.ui.getCore().getModel("oModel"); oModel.setProperty("/myData", "Reset" );
    }

  4. setProperty文档为here