【问题标题】:SAPUI5: Detail View Controller - Access DataSAPUI5:详细视图控制器 - 访问数据
【发布时间】:2018-03-07 08:30:33
【问题描述】:

我被我的小 UI5 应用困住了。这是一个具有相应 2 个视图的主/详细应用程序。我想访问详细控制器内的选定数据集。视图和应用程序本身工作。我可以在详细视图中显示数据。

但我需要控制器中的数据。我花了几个小时阅读,我相信它一定很简单。

handleRouteMatched 的细节控制器内部我定义了一个新变量var dataObject = this.getView().bindObject(oPath);

当我调试dataObject 时,我看到数据在那里(但所有数据不仅仅是选定的)。它在“未定义”的深处

我不知道如何掌握这个。有人可以帮忙吗?

编辑:

var sContext = this.getView().oController.sContext; //Retrieve context
var oModel = this.getOwnerComponent().getModel(); // Aquire the model
console.log(oModel.getProperty("/" + sContext + "/Businesstravel"));

这就是我最终让它工作的方式。不过,如果能获得整个记录(不仅仅是单个字段),那就太好了。

【问题讨论】:

    标签: javascript sapui5


    【解决方案1】:
    1. 获取已绑定上下文的对象。
    2. 获取此上下文,并从中获取路径。
    3. 使用路径从你的模型中获取对应的数据

    类似这样的:

    var oView = this.getView().byId('DetailPage1');
    var sPath = oView.getBindingContext('myModelName').getPath();
    var myData = this.getView().getModel('myModelName').getProperty(sPath);
    

    编辑

    好吧,我没有遵循你所有的代码,但测试了两件事对你有帮助。

    首先,要获取我在您的 detailPage1 控制器中使用的路由中的参数

    onInit: function(){
    this.oRouter = sap.ui.core.UIComponent.getRouterFor(this);
    this.oRouter.getRoute("DetailPage1").attachPatternMatched(this._onObjectMatched, this);
    ...
    },
    
    _onObjectMatched: function(oEvent) {
      var contextFromRouterParameter = oEvent.getParameter("arguments").context;
      console.log('contextFromRouterParameter: ' + contextFromRouterParameter);
    },
    

    其次,要获取你的模型(你在清单中定义它,所以它是在组件级别设置的)你需要做:

    var oModel = this.getOwnerComponent().getModel();
    

    无论您想在哪里取回它。然后你可以使用它的功能,如我之前提到的getProperty(sPath)

    【讨论】:

    • 我认为整个模型肯定有问题。我无法获取 oView(它是 undefined)。在 Chrome 中调试它时,我可以看到以下日志:2018-03-08 14:24:13.721399 Did place the view 'com.sap.build.sap.hrAttrition.view.DetailPage1' with the id 'application-BUILD-prototype-component---DetailPage1' into the aggregation 'detailPages' of a control with the id 'application-BUILD-prototype-component---app--idAppControl' - EventProvider sap.m.routing.Target 所以我也尝试使用全名但没有成功。看来这也是我普遍面临的问题。
    • 我试图跳过第 1 步,只是输入了var sPath = this.oView.getBindingContext("dataSource").getPath(); 看起来(我可以在调试器中看到oViewthis 的一部分。但又是undefined。那是我的从昨天开始的问题。不知何故,我无法获取控制器中的任何数据。原则上一定有问题(哦,谢谢你一直帮助我:-)) - 再次,这两个视图工作但我无法访问Detail 控制器中的任何数据。仅作为细节 view.xml 上的元素
    • 您能添加您的代码吗?至少,详细视图的 XML 视图、详细视图的控制器、主控制器中处理项目选择的函数以及 manifest.json 文件中的路由定义
    • 早安 Rafael,我已将项目从 WebUI 导出到 zip file。真的谢谢你,这一定是我的一个基本错误。
    • 是的,var oView = this.getView().byId('DetailPage1'); 在您的代码中不起作用,因为您的视图中没有名为“DetailPage1”的控件。一开始我只是误解了你的截图。 DetailPage1 是您的视图的名称。您将在控制器中查看this.getView() 的视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多