viewtest 绑定到JSONModel。 View2 通过创建对 viewtest 的引用并将模型设置为viewtest.getModel()来绑定到同一个JSONModel。
我尝试做的是通过单击按钮修改 View3 中的共享模型数据,以便textfield和textview中的文本自动更改。但是,textfield和textview中的文本仍然是"这是一个文本"。问题是什么?
index.html文件:
和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];
}
});

答案 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中设置模型。