如何从另一个视图更改视图的模型数据?

时间:2015-07-01 09:32:15

标签: sapui5

viewtest 绑定到JSONModel。 View2 通过创建对 viewtest 的引用并将模型设置为viewtest.getModel()来绑定到同一个JSONModel。

我尝试做的是通过单击按钮修改 View3 中的共享模型数据,以便textfield和textview中的文本自动更改。但是,textfield和textview中的文本仍然是"这是一个文本"。问题是什么?

index.html文件: enter image description here

和viewtest.view.js文件:



sap.ui.jsview("viewtest.viewtest", {
	getControllerName : function() {
		return "viewtest.viewtest";
	},
	createContent : function(oController) {
  		this.setModel(new sap.ui.model.json.JSONModel());
		var oData = {
				text: "this is a text"
		};
		this.getModel().setData(oData);
		var oTextField = new sap.ui.commons.TextField({value: "{/text}"});
		return [oTextField];
	}
});




View2.view.js文件:



sap.ui.jsview("viewtest.View2", {
	getControllerName : function() {
		return "viewtest.View2";
	},
	createContent : function(oController) {
		var viewtest = sap.ui.view({viewName: "viewtest.viewtest", type:sap.ui.core.mvc.ViewType.JS});
		this.setModel(viewtest.getModel());
		this.getModel().setData(viewtest.getModel().getData());
		var oTextView = new sap.ui.commons.TextView({text: "{/text}"});
		return [oTextView];
	}
});




View3.view.js文件:



sap.ui.jsview("viewtest.View3", {
	getControllerName : function() {
		return "viewtest.View3";
	},
	createContent : function(oController) {
		var oButton = new sap.ui.commons.Button({text:"click", press: func});
		function func() {
			var oView = new sap.ui.view({viewName:"viewtest.viewtest", type:sap.ui.core.mvc.ViewType.JS});
			oView.getModel().setData({text:"hello world"}, true);
		}
		return [oButton];
	}
});




1 个答案:

答案 0 :(得分:0)

只是一个建议。也许值得将.html文件ID提供给每个视图,然后在view3中更新并通过id调用每个视图设置模型? 像,
在index.html:

var view1 = new sap.ui.view({id:"view1", viewName:"viewtest.View1", type:sap.ui.core.mvc.ViewType.JS});

然后在view3中:

function func() {
    var oView = sap.ui.getCore().byId("view1");
    oView.getModel().setData({text:"hello world"}, true);
    oView.getModel().refresh(); //if setting new model won't update the views
}

或者,如果您在所有视图中使用相同的模型,请将模型不是单独设置为每个视图,而是设置为核心:

viewtest.view.js文件:

sap.ui.getCore().setModel(new sap.ui.model.json.JSONModel());

因此,您无需在view2中设置模型。