核心模型无法访问

时间:2017-02-25 13:37:44

标签: sapui5

我想绑定一个全局模型并在不同的xml视图中访问它,但它总是不显示任何内容。

在Controller中,我以这种方式绑定数据......

sap.ui.define([
    'jquery.sap.global',
    'sap/ui/core/mvc/Controller',
    'sap/ui/model/json/JSONModel'
], function (jQuery, Controller, JSONModel) {
    "use strict";

    return Controller.extend("sap.ui.demo.controller.DatasourceManagement", {
        onInit: function() {
            var datasourcesModel = new JSONModel('/api/datasources');
            sap.ui.getCore().setModel(datasourcesModel, 'datasources');
            //this.getView().setModel(datasourcesModel,'datasources');
        },
....

在View中我尝试以这种方式访问​​数据......

mvc:View xmlns="sap.m" xmlns:tnt="sap.tnt" xmlns:l="sap.ui.layout"
    xmlns:mvc="sap.ui.core.mvc"
    controllerName="sap.ui.demo.controller.DatasourceManagement">

    <Page showHeader="false" enableScrolling="true" class="sapUiContentPadding test"
        showNavButton="false">

        <content>
            <Table id="datasourceTable"
                items="{path: 'datasources>',
                        sorter: {
                        path: 'id'
                       }}"
....

我的代码有什么问题?

-------编辑1 ------------- URL“/ api / datasources”返回一个条目数组:

[
  {
    "id": 1,
    "name": "FTPSERVER",
    "hostname": "test.de",
    "port": 21,
    "username": "username",
    "password": "password"
  },
  {
    "id": 2,
    "name": "FTPSERVERasdasdasdadsads1111111",
    "hostname": "test.de",
    "port": 21,
    "username": "username",
    "password": "password"
  },
  {
    "id": 3,
    "name": "FTPSERVER",
    "hostname": "test.de",
    "port": 21,
    "username": "username",
    "password": "password"
  }
]

3 个答案:

答案 0 :(得分:1)

TL DR

我认为这是因为您的表项绑定路径,特别是您应该将其更改为&#39;数据源&gt; / &#39;而不是&#39;数据源&gt;&#39;。

推理

根据您显示的代码段,我假设&#34; / api / datasources&#34;返回条目的数组/映射。

假设HTTP请求返回非空数组(您应该在Developer Console中检查 - >网络选项卡),我看到代码中只有一个问题:绑定路径表格的项目是相对的。

在UI5中,绑定有两种类型:

  • 相对:路径不以&#34; /&#34;开头(例如路径:&#39;数据源&gt;&#39;)
  • 绝对:路径以&#34; /&#34;开头; (例如路径:&#39;数据源&gt; /&#39;)

通过获取模型中给定路径的对象,可以直接解析绝对绑定。另一方面,相对绑定相对于祖先指定的某个路径进行解析。如果没有其他祖先元素(绝对)绑定到此JSON模型的某些内容,则绑定将无法解析。

答案 1 :(得分:0)

主要问题是,如果将模型设置为核心,则组件的子项不会自动知道该模型。您可以更改此行为。以下是对遇到类似问题的人的回答:https://stackoverflow.com/a/42251431/5846045

同样作为Serban pointed out,绑定路径语法在末尾缺少/以访问绝对路径中的数组。所以它应该是:datasources> /

答案 2 :(得分:0)

现在我得到了解决方案......

当我将模型绑定到它工作的组件时:

this.getOwnerComponent().setModel(datasourcesModel, 'datasources');

并且在视图中我可以通过这种方式绑定模型:

<core:View xmlns="sap.m" xmlns:tnt="sap.tnt" xmlns:l="sap.ui.layout"
    xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc"
    controllerName="sap.ui.demo.controller.DatasourceManagement">

    <Page showHeader="false" enableScrolling="true" class="sapUiContentPadding test"
        showNavButton="false">

        <content>
            <Table id="datasourceTable"
                items="{path: 'datasources>/',
                        sorter: {
                        path: 'id'
                       }}"

我非常感谢你的帮助......