2016-12-04 4 views
1

Уважаемые разработчики SAP Fiori,Как получить пространство имен SAPUI5 в контроллере?

Как получить пространство имен приложений в классах JavaScript? Я имею в виду, что в data-sap-ui-resourceroots внутри index.html мы определяем пространство имен статически. Как я могу получить доступ к этому пространству имен в классах контроллера Javascript?

Заранее спасибо.

+0

Почему именно вам это нужно и чего именно вы пытаетесь достичь? – Nabi

+0

Я хочу создать класс и использовать его в разных приложениях. Но я не хочу, чтобы каждый раз приходилось менять статические строки в классах при копировании и прохождении этого файла контроллера. Я хочу написать контроллер как-то универсальный, чтобы иметь возможность копировать в любом месте. Кстати, г-н Наби видел ваш блог. Это довольно хорошо, но его данные немного стары. Я оставил там некоторые комментарии, но, похоже, вы их не заботитесь. Я думаю, что хорошо обновить их на основе представления XML. –

+0

Вчера был еще один ответ, который больше не доступен. Основываясь на вопросе и дополнительных деталях, я верю, что один ответ мог быть правильным, хотя вы его не приняли. Я думаю, что имеет смысл добавить некоторые подробности, возможно даже образцы кода. Меня смущает «копировать и вставлять». Ожидаете ли вы действительно скопировать и вставить код? Это звучит как плохой подход. И снова парень, который ответил, имел правильное решение для вас! И: Вы оставили только один комментарий о некритической опечатке 4 месяца назад в одном из моих учебников. Я ответил прямо сейчас. – Nabi

ответ

2

Вы можете определить пространство имен в качестве постоянного значения и использовать эту константу в component.js:

var __NAMESPACE = "sap.ui.demo.toolpageapp."; 
… 
return UIComponent.extend(__NAMESPACE + "Component", { 

Такого рода замена будет работать в JavaScript кодирования и JavaScript Просмотры. Он не будет работать с xml-файлами и файлами-манифестами. Также рекомендуется использовать xml-views.

Другой вариант - использовать редактор, в котором вы можете одновременно искать и заменять все файлы своего приложения.

0

Доступ к объекту window["sap-ui-config"] resourceroots. См документ на Configuration of the OpenUI5 Runtime

+1

Решение может быть правильным, так как у меня есть файл index.html. Как только я удаляю его как приложение fiori, у которого больше нет index.html, это решение не работает. –

+0

Также мне нужно ввести «resourceroots» в 2 местах. –

0

Вы можете определить свои корни ресурсов в index.html, как вы предложили:

<script src="https://sapui5.netweaver.ondemand.com/1.38.12/resources/sap-ui-core.js" 
       id="sap-ui-bootstrap" 
       data-sap-ui-libs="sap.m" 
       data-sap-ui-theme="sap_belize" 
       data-sap-ui-compatVersion="edge" 
       data-sap-ui-preload="async" 
       data-sap-ui-resourceroots='{ 
        "fiori": "./", 
        "abc": "../abc_web/lib/", 
        "def": "../def_web/" 
       }' 
       > 
     </script> 

Допустим, вам нужно использовать некоторую функцию от mathLib.js (который находится в/abc_web /lib/mathLib.js) в вашем контроллере (например, App.controller.js). Вы можете Acces его следующим образом:

 sap.ui.define([ 
     "sap/ui/core/mvc/Controller",  
     "abc/mathLib", 

     ], function(Controller, CallItAsYouWant) { 
      "use strict";  
      return Controller.extend("fiori.controller.App", { 
       onInit: function() { 
       ...your code 
       CallItAsYouWant.someFunction();      
       } 
       ... 
+0

Уважаемый сэр. Это был не мой вопрос. Я знаю, как вызвать функцию из некоторых других контроллеров. Я хочу поймать пространство имен программно и не хранить его в строке. Таким образом, когда я копирую файл в некоторых других программах, мне не нужно обновлять эти строки раз до времени. –

1

Приложение Fiori не использует index.html как входной файл, он напрямую обращается к Component.js. Поэтому моя идея - получить пространство имен из manifest.json. Я выбрал дескриптор rootView.

//any.controller.js 
_getNamespace: function() { 
    //namespace.App 
    var oViewName = this.getOwnerComponent().getMetadata().getRootView().viewName; 

    return oViewName.split(".")[0]; 
} 
+0

Измените свой ответ, добавив некоторые пояснения. Избегайте ответа только на код, посмотрите: https://stackoverflow.com/help/how-to-answer – GGO