2017-01-31 12 views
0

У меня проблема с моим приложением UI5 и простой формой. Как показано в примерах исследуемого приложения.Связывание событий XML Fragment с контроллером не работает

Сценарий заключается в том, что нажатие на редактирование заменяет содержимое страницы другим SimpleForm фрагмента (codebehind в контроллерах).

Я делаю то же самое; Единственное отличие состоит в том, что я просто заменяю содержимое SimpleForm элементами управления, хранящимися в фрагменте XML.

Теперь у меня есть кнопка, событие щелчка которой должно быть привязано к базовому контроллеру. Но когда вы делаете это в коде, события на контроллере больше не запускаются. Он работал, когда я использовал фрагмент в файле определения вида xml, но теперь этого не происходит.

controllerModelPropertyChanged(oEvent: sap.ui.base.Event) { 
      let cdata = (oEvent.getSource() as any).getData() as agenttemplatesdetailcontroller; 
      let p = this.byId("form") as sap.ui.layout.form.SimpleForm; 
      for(let c of p.getContent()) 
       c.destroy(); 
      p.removeAllContent(); 
      let f = sap.ui.xmlfragment("ifm.datalink.linerecorder.ams.frontend.view.fragments.agentTemplates."+ (cdata.edit ? "AgentTemplateDetailsEdit" : "AgentTemplateDetailsDisplay")) as sap.ui.core.Control[]; 
      f.forEach((v) => { p.addContent(v); }); 
     } 

Связанные события с контроллером не связаны при добавлении элемента управления? Должен ли я привязывать их вручную?

EDIT:

Дисплей Фрагмент:

<core:FragmentDefinition 
     xmlns="sap.m" 
     xmlns:core="sap.ui.core" 
     xmlns:u="sap.ui.unified"> 
     <Label text="{i18n>templates.details.name}"/> 
     <Text text="{template>/Name}" enabled="{form>/enabled}"/> 
     <Label text="{i18n>templates.details.description}"/> 
     <Text text="{template>/Description}" editable="{form>/enabled}"/> 
     <List headerText="{i18n>templates.details.versionsTitle}" items="{template>/Versions}"> 
     <CustomListItem> 
      <HBox> 
      <Label text="{template>Version/Major}.{template>Version/Minor}.{template>Version/Build}"/> 
      <Label text=" ({parts: [{path: 'template>CreationDate', type: 'sap.ui.model.odata.type.Date'}, {path: 'i18n>global.dateformat', type: 'sap.ui.model.type.String'}], formatter: '.odatadateformatter'})"/> 
      <Label text="{ams>Guarantor/username}"/> 
      </HBox> 
      </CustomListItem> 
     </List> 
</core:FragmentDefinition> 

Редактировать фрагмент:

<core:FragmentDefinition 
     xmlns="sap.m" 
     xmlns:core="sap.ui.core" 
     xmlns:u="sap.ui.unified"> 
     <Label text="Name"/> 
     <Input value="{template>/Name}" enabled="{form>/enabled}"/> 
     <Label text="Description"/> 
     <TextArea value="{template>/Description}" editable="{form>/enabled}"/> 
     <Label text="Upload new Version"/> 
     <u:FileUploader id="fileUploader" name="MyFileUpload" uploadUrl="http://localhost:13917/api/fileupload/uploadfile" tooltip="Upload your file to the local server" uploadComplete="handleUploadComplete"/> 
     <Button text="Upload File" press="AddNewTemplateVersion"/> 
     <List headerText="{i18n>templates.details.versionsTitle}" items="{template>/Versions}"> 
     <CustomListItem> 
      <HBox> 
      <Label text="{template>Version/Major}.{template>Version/Minor}.{template>Version/Build}"/> 
      <Label text=" ({parts: [{path: 'template>CreationDate', type: 'sap.ui.model.odata.type.Date'}, {path: 'i18n>global.dateformat', type: 'sap.ui.model.type.String'}], 
          formatter: '.odatadateformatter'})"/> 
      <!--<Label text="{ams>Guarantor/username}"/>--> 
      </HBox> 
      </CustomListItem> 
     </List> 
    </core:FragmentDefinition> 

Вид:

<mvc:View 
     controllerName="ifm.datalink.linerecorder.ams.frontend.controller.agentTemplates.AgentTemplatesDetail" 
     xmlns="sap.m" 
     xmlns:core="sap.ui.core" 
     xmlns:commons="sap.ui.commons" 
     xmlns:f="sap.ui.layout.form" 
     xmlns:l="sap.ui.layout" 
     xmlns:mvc="sap.ui.core.mvc"> 
    <f:SimpleForm 
      class="lra5form" 
      minWidth="500" 
      maxContainerCols="2" 
      layout="ResponsiveGridLayout" 
      title="{i18n>templates.details.title}" 
      editable="{controller>/edit}" 
      labelSpanL="3" 
      labelSpanM="3" 
      emptySpanL="4" 
      emptySpanM="4" 
      columnsL="1" 
      columnsM="1" 
      id="form"> 
    <f:toolbar> 
     <Toolbar> 
     <Button text="{i18n>templates.details.edit}" icon="sap-icon://edit" enabled="{= !${controller>/edit}}" press="onEditPressed" /> 
     <Button text="{i18n>templates.details.delete}" icon="sap-icon://delete" press="onDelete" visible="{= !${controller>/edit}}" /> 
     <ToolbarSpacer/> 
     <Button text="{i18n>global.accept}" icon="sap-icon://accept" press="onAcceptClicked" visible="{controller>/edit}" enabled="{controller>/changed}"/> 
     <Button text="{i18n>global.cancel}" icon="sap-icon://cancel" press="onCancelClicked" visible="{controller>/edit}" /> 
     </Toolbar> 
    </f:toolbar> 
    <f:content> 
     <core:Fragment fragmentName="ifm.datalink.linerecorder.ams.frontend.view.fragments.agentTemplates.AgentTemplateDetailsDisplay" type="XML"/> 
    </f:content> 
    </f:SimpleForm> 
</mvc:View> 
+0

вы можете разделить XML декларацию зрения, где вы ссылаетесь фрагмент + код фрагмента? –

+0

Вот вам, спасибо за вашу помощь. Я не изменил имя обработчика событий на моем контроллере. –

+0

Я не вижу кнопку с событием пресса = "controllerModelPropertyChanged", который должен вызвать функцию? –

ответ