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

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