sapui5 Две привязки работают, вызывая backend. Одна привязка не будет вызывать бэкэнд

Эксперты. Можете ли вы помочь мне решить эту тайну. Я получил пример пошагового руководства в https://sapui5.hana.ondemand.com/ и адаптировал его, чтобы я мог создать простую привязку к службе OData.

Позвольте мне поделиться основными файлами:

Component.js

sap.ui.define([
 "sap/ui/core/UIComponent",
 "sap/ui/model/json/JSONModel"
], function (UIComponent, JSONModel) {
 "use strict";

 return UIComponent.extend("BasicMessages.Component", {

  metadata : {
   manifest: "json"
  },

  init : function () {
   // call the init function of the parent
   UIComponent.prototype.init.apply(this, arguments);

   // set data model
   var oData = {
    recipient : {
     name : "World"
    }
   };
   var oModel = new JSONModel(oData);
   this.setModel(oModel,"json");
  }
 });

});

Manifest.json (скрыл URI службы, но он правильно настроен)

{
 "_version": "1.8.0",
 "sap.app": {
  "id": "BasicMessages",
  "type": "application",
  "i18n": "i18n/i18n.properties",
  "title": "{{appTitle}}",
  "description": "{{appDescription}}",
  "applicationVersion": {
   "version": "1.0.0"
  },
  "dataSources": {
   "mainService": {
    "uri": "hidden_service_uri",
    "type": "OData",
    "settings": {
     "odataVersion": "2.0",
     "localUri": "localService/metadata.xml"
    }
   }
  }
 },
 "sap.ui": {
  "technology": "UI5",
  "deviceTypes": {
   "desktop": true,
   "tablet": true,
   "phone": true
  }
 },
 "sap.ui5": {
  "rootView": {
   "viewName": "BasicMessages.view.App",
   "type": "XML",
   "async": true,
   "id": "app"
  },
  "dependencies": {
   "minUI5Version": "1.30",
   "libs": {
    "sap.m": {

    }
   }
  },
  "models": {
   "i18n": {
    "type": "sap.ui.model.resource.ResourceModel",
    "settings": {
     "bundleName": "BasicMessages.i18n.i18n"
    }
   },
   "": {
    "dataSource": "mainService",
    "settings": {
     "defaultUpdateMethod": "PUT",
     "useBatch":false,
     "metadataUrlParams": {
      "sap-documentation": "heading"
     },
     "defaultBindingMode": "TwoWay"
    }
   }
  }
 }
}

App.controller.js

sap.ui.define([ "sap/ui/core/mvc/Controller", "sap/m/MessageToast" ],
        function (Controller, MessageToast) {
            "use strict";

            return Controller.extend("BasicMessages.controller.App", {

                onShowHello : function () {
                    // read msg from i18n model
                    var oBundle = this.getView().getModel("i18n")
                            .getResourceBundle();
                    var sRecipient = this.getView().getModel("json")
                            .getProperty("/recipient/name");
                    var sMsg = oBundle.getText("helloMsg", [ sRecipient ]);

                    // show message
                    MessageToast.show(sMsg);
                },

                onInit : function () {
                    this.getView()
                            .setModel(this.getOwnerComponent().getModel());
                }
            });

        });

App.view.xml (это хитрый файл)

1 - <mvc:View controllerName="BasicMessages.controller.App" xmlns="sap.m"
2 -    xmlns:mvc="sap.ui.core.mvc">
3 -    <Button text="{i18n>showHelloButtonText}" press="onShowHello" />
4 -    <Input value="{json>/recipient/name}" description="Hello
5 -       {json>/recipient/name}"
6 -       valueLiveUpdate="true" width="60%" />
7 -    <Text
8 -       text="{/Caixas(Id='0001',InicioValidade='20180712193002')/Descricao}" />
9 - 
10 -    <List items="{/Caixas}">
11 -       <StandardListItem title="{Descricao}" />
12 - 
13 -    </List>
14 - 
15 - </mvc:View>

Если я использую файл представления точно так же, он вызывает службу OData на сервере и получает список (строки с 10 по 13) и текстовые (строки с 7 по 8) элементы содержимого.

ссылка на скриншот: https://pin.it/zupo3ntgsaymho

Если я прокомментирую строки списка (строки с 10 по 13), служба OData не будет вызвана, и текстовый элемент (строки с 7 по 8) не будет заполнен текстом.

ссылка на скриншот: https://pin.it/pq52tqn53prhtj

Почему это происходит???

2 ответа

Решение

Получил ответ по SAP Docs

Примечание. Запросы к серверной части инициируются привязками списков (ODataListBinding), привязками элементов (ODataContextBinding) и функциями CRUD, предоставляемыми ODataModel. Привязки свойств (ODataPropertyBindings) не вызывают запросы.

Я думаю, Рафаэль объяснил, почему это происходит (ваш вопрос), чтобы теперь ответить на незаданный вопрос "как заставить это работать":

Вам нужно будет связать элемент управления Text с правами и text собственность на Descricio атрибут, в основном что-то вроде этого:

<Text binding="{/Caixas(Id='0001',InicioValidade='20180712193002')" text="{Descricao}" />

(извините, среды исполнения ui5 нет, так что я не запускал ее)

Другие вопросы по тегам