XML Fragment事件绑定到控制器不起作用

时间:2017-01-31 15:00:13

标签: data-binding sapui5

我的UI5应用程序出了问题,表单很简单。如已探索的应用程序的示例中所示。

场景是按下编辑用片段的其他SimpleForm替换页面的内容(控制器中的代码隐藏)。

我也这样做;唯一的区别是我只是用存储在XML片段中的Controls替换SimpleForm的内容。

现在我有一个Button,其中click事件应绑定到底层控制器。但是当你在代码隐藏中执行此操作时,控制器上的事件不再被触发。它在我的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); });
        }

添加控件时绑定事件是否未绑定到控制器?我必须手动绑定它们吗?

编辑:

显示片段:

<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>

1 个答案:

答案 0 :(得分:4)

您应该添加对控制器的引用以处理回调。

例:
this._oDialog = sap.ui.xmlfragment(&#34; sap.ui.demo.wt.view.HelloDialog&#34; ,此 );

这是片段回调文档的链接:(https://help.sap.com/viewer/0ce0b8c56fa74dd897fffda8407e8272/7.5.5/en-US/354f98ed2b514ba9960556333428d35e.html