2015-06-05 2 views
0

Я хочу использовать тот же компонент SAPUI5 для разных целей.Параметры компонента sapui5 отображаются иногда, иногда неопределенные (тот же код)

Я хочу, чтобы различать использования с настройками, как показано здесь

var oComponentContainer = new sap.ui.core.ComponentContainer({ 
        url : "resources/components/clientSelector", 
        name : "components.clientSelector", 
        id : "components.clientSelector", 
        propagateModel : true, 
        settings : { 
         bPopupView : true, 
         iOffset : $(document).height() - 300 
        } 
       }); 

Иногда, когда я console.log мой component.oContainer, это показывает, что он так же, как и ожидалось, а иногда ничего не показывает на всех, он показывает undefined.

Это может быть связано с тем, что мой javascript является асинхронным?

+0

«иногда», вы имеете в виду, когда именно? –

+0

@SunilBN Точно такой же код, если я нажимаю кнопку управления + F5, он работает примерно в 50% случаев –

+0

Будет ли у него возможность запускать сниппет онлайн? , или вы можете разместить здесь полный код. Потому что я не вижу переменную component.oContainer в вашем текущем фрагменте кода –

ответ

0

Я выяснил, проблема & ответ. SAPUI5 создает и создает экземпляр компонента перед созданием контейнера. В зависимости от того, насколько быстро создается компонент (включая представление и инициализацию контроллера), этот код может быть уже завершен к моменту установки параметров.

Я также нашел способ решить эту проблему: вместо параметров, я сейчас, используя свойство componentData, который работает как шарм:

var oComponent = sap.ui.getCore().createComponent({ 
     url: "resources/components/clientSelector", 
     name: "components.clientSelector", 
     id: "components.clientSelector", 
     componentData: { 
      test: "xx" 
     } 
     }); 
     var oComponentContainer = new sap.ui.core.ComponentContainer({ 
     component: oComponent 
     }); 

я могу получить доступ к oComponent.getComponentData() от инициализации первого вида и вернуть мои тестовые данные.