假设我有以下XML视图:
<mvc:View xmlns:mvc="sap.ui.core.mvc" ...>
<Page>
<content>
<l:VerticalLayout>
<l:content>
<core:Fragment fragmentName="my.static.Fragment" type="XML" />
</l:content>
</l:VerticalLayout>
</content>
</Page>
</mvc:View>
片段my.Fragment
是静态加载的。但是,我现在想要动态更改要加载的片段(理想情况下使用绑定fragmentName
属性的数据,但任何其他方法也应该没问题),即。像这样的东西:
<mvc:View xmlns:core="sap.ui.core.mvc" ...>
<Page>
<content>
<l:VerticalLayout>
<l:content>
<core:Fragment fragmentName="{/myDynamicFragment}" type="XML" />
</l:content>
</l:VerticalLayout>
</content>
</Page>
</mvc:View>
然而,后者不起作用,Fragment定义不允许数据绑定......我可能错过了一些东西,但是我应该如何根据参数/动态更改XML视图中的Fragment model property / etc?
现在,我已经使用了一个自定义控件,而不是直接在我的视图中使用一个片段,并让该控件执行调度到相应的片段,但我觉得应该有一个更容易的,不合适的盒子方式......
答案 0 :(得分:3)
我认为唯一的解决方案是从控制器的onInit
方法初始化片段:
sap.ui.controller("my.controller", {
onInit : function(){
var oLayout = this.getView().byId('mainLayout'), //don't forget to set id for a VerticalLayout
oFragment = sap.ui.xmlfragment(this.fragmentName.bind(this));
oLayout.addContent(oFragment);
},
fragmentName : function(){
return "my.fragment";
}
});
答案 1 :(得分:-1)
片段名称也可以来自绑定,包括表达式绑定,其评估为常量。由于格式化程序函数返回字符串,而不是布尔值,===&#39; true&#39;已在以下示例中添加:
示例:动态片段名称
<core:Fragment fragmentName="{= ${path: 'facet>Target', formatter: 'sap.ui.model.odata.AnnotationHelper.isMultiple'} === 'true'
? 'sap.ui.core.sample.ViewTemplate.scenario.TableFacet'
: 'sap.ui.core.sample.ViewTemplate.scenario.FormFacet' }" type="XML"/>