2016-11-16 3 views
0

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

на заказ плитка:

jQuery.sap.declare("myControls.myMenuTile"); 
jQuery.sap.require("sap.m.CustomTile"); 

sap.m.CustomTile.extend("myControls.myMenuTile", { 
metadata: { 
    properties: { 
     "header": { 
      type: "string", 
      defaultValue: "myMenuTile" 
     }, 
     "icon": { 
      type: "string", 
      defaultValue: "sap-icon://shipping-status" 
     }, 
     // some more properties here... 
    }, 
}, 

// will be called during creation time 
init: function() { 
    sap.m.CustomTile.prototype.init.call(this); 

    this.addStyleClass("myMenuTileClass"); 

    // Header text 
    var txt = new sap.m.Text({ 
     textAlign: "Center" 
    }); 

    txt.addStyleClass("myMenuTile_Text"); 
    txt.bindProperty("text", "header");  // --> POINT OF INTERREST <-- 
    var textFlex = new sap.m.FlexBox({ 
     fitContainer: true, 
     alignItems: "Center", 
     justifyContent: "Center", 
     items: [txt] 
    }); 
    textFlex.addStyleClass("sapUiTinyMargin"); 

    // some more code here... 

    var flexBox = new sap.m.FlexBox({ 
     direction: "Column", 
     fitContainer: true, 
     height: "100%", 
     width: "100%", 
     class: "sapUiTinyMargin", 
     items: [textFlex] 
    }); 

    this.setContent(flexBox); 
} 

Часть зрения:

<TileContainer id="tileContainer" 
       tiles="{path: '/Row'}" 
       style="width: 100%;" 
       > 
    <!--<StandardTile icon="{ICON}" 
         title="{TEXT}" 
         press="onTilePressed" 
         />--> 
    <ctrl:myMenuTile header="{TEXT}" 
        icon="{ICON}" 
        press="onTilePressed" 
        class="sapUiTinyMargin" 
        /> 
</TileContainer> 

Связанные поля TEXT и ICON находятся в sap.ui.model.xml.XMLModel который загружается из базы данных. Они имеют верхний регистр, потому что Oracle делает верхний регистр колонок. Когда я использую StandardTile, TEXT и ICON отображаются правильно. Когда я использую пользовательскую плитку, текст и никакая иконка не отображаются.

Но я обнаружил, что, когда я изменить линию (см ТОЧКИ INTERREST) ​​

txt.bindProperty("text", "header"); 

в

txt.bindProperty("text", "TEXT"); 

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

Что мне не хватает? Заранее благодарны за Вашу помощь.

С наилучшими пожеланиями Йохы

ответ

2

Почему вы связыванием свойства в пользовательском названии? Когда вы привязываете модель к элементу управления в представлении, элемент управления получит значение. Поэтому нет необходимости связывать его еще раз.

Попробуйте заменить следующую строку txt.bindProperty... на номер txt.setText(this.getHeader()).

+0

Извините за мой поздний ответ - меня не было в городе. Я пытаюсь связать внутри элемента управления снова, потому что таким образом я могу использовать функцию рендеринга «внутренних» элементов управления. В противном случае мне пришлось бы реализовать пользовательскую функцию рендеринга –

Смежные вопросы