如何重用Odata模型填充第二个视图

2020-09-08 13:30发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我正在创建一个具有2个视图的应用程序。我在Manifest.json中创建了一个名为odata Model的名称为:matDescModel,并且据了解,可以从任何视图访问该模型(我正确)。

现在单击按钮后,我将使用以下后端数据填充此模型:

 var matnr = this.getView()。byId(" __ inp0")。getValue();
 var path =" matDescModel>/GetMatDescSet('" + matnr +"')";
 this.getView()。bindElement(path);
 

我可以在具有绑定的View中查看数据,如下所示:

  

效果很好

现在在View 2上,我正在执行相同类型的绑定:

  

在onInit()中的view 2控制器中具有以下代码:

 var oModel = this.getOwnerComponent()。getModel(" matDescModel");
 this.getView()。setModel(oModel);
 

当我看到view2的oModel时,可以在调试器代码中看到oData,请参见屏幕截图

odata.jpg

但是在视图2上,我没有在屏幕上看到数据,

这是一个有约束力的问题吗? 还是框架只允许绑定一次?

我是否需要从控制器手动进行绑定或如何实现绑定??

致谢

Rakesh

odata.jpg (16.1 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我正在创建一个具有2个视图的应用程序。我在Manifest.json中创建了一个名为odata Model的名称为:matDescModel,并且据了解,可以从任何视图访问该模型(我正确)。

现在单击按钮后,我将使用以下后端数据填充此模型:

 var matnr = this.getView()。byId(" __ inp0")。getValue();
 var path =" matDescModel>/GetMatDescSet('" + matnr +"')";
 this.getView()。bindElement(path);
 

我可以在具有绑定的View中查看数据,如下所示:

  

效果很好

现在在View 2上,我正在执行相同类型的绑定:

  

在onInit()中的view 2控制器中具有以下代码:

 var oModel = this.getOwnerComponent()。getModel(" matDescModel");
 this.getView()。setModel(oModel);
 

当我看到view2的oModel时,可以在调试器代码中看到oData,请参见屏幕截图

odata.jpg

但是在视图2上,我没有在屏幕上看到数据,

这是一个有约束力的问题吗? 还是框架只允许绑定一次?

我是否需要从控制器手动进行绑定或如何实现绑定??

致谢

Rakesh

odata.jpg (16.1 kB)
付费偷看设置
发送
4条回答
huskylover
1楼-- · 2020-09-08 13:41

嗨,

我认为这是因为您将模型设置为第二个视图,但没有绑定该视图。

您必须使用与第一个视图相同的路径来绑定视图

 var path =" matDescModel>/GetMatDescSet('" + matnr +"')";
 this.getView()。bindElement(path); 

致谢

Fabrice

Aaron 3364
2楼-- · 2020-09-08 13:51

嘿,Fabrice,

感谢您的答复。

是的,如果我按照您的建议进行装订工作正常,那么我已经看到了。 但是,如果我这样做是从后端再次调用oData,我想知道是否已经有数据了,为什么我应该从后端再次调用odata呢?

我怎么只能调用一次odata并将其绑定到多个视图,这就是我想要的还是根本不可能的?

致谢

Rakesh

Bunny_CDM
3楼-- · 2020-09-08 13:36

您不能限制对第二个视图的后端调用,可以尝试以下一种方法,

1)在绑定的更改事件中, 您可以将数据设置为全局json模型(在component.js中定义),

 this.getView()。bindElement({
 路径:路径,
 事件:{
   更改:this._onBindingChange.bind(this)
   }
 });
 和
 _onBindingChange:function(){
   var data = this.getView()。getBindingContext()。getObject();
  //将此数据设置为json模型并在第二个视图中使用
  //或使用快速方式,您可以携带全局变量,即$ .sap.view1Data = data,并且可以在第二个视图中访问$ .sap.view1Data
 } 

2)进行odata读取调用并准备一个json模型并在两个视图中使用

3)您可以使用模式中的router将值传递给第二个视图

>
四川大学会员
4楼-- · 2020-09-08 13:59

1)您错了,您的odata模型基于odata服务,而不是您用于view1的实体,您的view1绑定元素意味着odatamodel + entity将会进入后端并提取数据,范围 除非您将其引入其他模型以进行重用,否则仅是当前的当前视图。 还有任何疑问吗? 我建议看一下odatamodel教程。

2)一旦加载了实体数据,就可以使用getProperty()获取数据,是的,如果您想减少后端调用json模型是唯一的方法。

为什么不是全局模型,当您进行元素绑定时,您可以在其中定义更改事件,并且每次都会触发。

一周热门 更多>