如何从另一个视图更改视图的模型数据?
How to change model data of a view from another view?
viewtest 绑定到 JSONModel。通过创建对 viewtest 的引用并将模型设置为 viewtest.getModel().[=14=,View2 绑定到相同的 JSONModel ]
我想做的是通过单击按钮修改 View3 中的共享模型数据,以便文本字段和文本视图中的文本将自动更改。但是,textfield 和 textview 中的文本仍然 "This is a text"。有什么问题?
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];
}
});
只是一个建议。也许值得将您的 .html 文件 ID 提供给每个视图,然后在 view3 中更新并通过按 ID 调用它们为每个视图设置模型?
喜欢,
在 index.html:
var view1 = new sap.ui.view({id:"view1", viewName:"viewtest.View1", type:sap.ui.core.mvc.ViewType.JS});
然后在视图 3 中:
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 中设置模型。
viewtest 绑定到 JSONModel。通过创建对 viewtest 的引用并将模型设置为 viewtest.getModel().[=14=,View2 绑定到相同的 JSONModel ]
我想做的是通过单击按钮修改 View3 中的共享模型数据,以便文本字段和文本视图中的文本将自动更改。但是,textfield 和 textview 中的文本仍然 "This is a text"。有什么问题?
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];
}
});
只是一个建议。也许值得将您的 .html 文件 ID 提供给每个视图,然后在 view3 中更新并通过按 ID 调用它们为每个视图设置模型?
喜欢,
在 index.html:
var view1 = new sap.ui.view({id:"view1", viewName:"viewtest.View1", type:sap.ui.core.mvc.ViewType.JS});
然后在视图 3 中:
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 中设置模型。