我想通过视图动态加载XML片段。我在加载片段视图中的模型绑定时遇到一些问题。
为什么这样做?
<Input value="{mobile}" />
但这不是吗?
<core:Fragment fragmentName="{mobile}" type="XML" />
控制器
setFragmentNameToView: function(){
var oModel = new sap.ui.model.json.JSONModel({
mobile: "com.xxxxxxx.fragment.fieldsFragment"
});
var bindingContext = new sap.ui.model.Context();
bindingContext.oModel = oModel;
bindingContext.sPath = "/";
this.getView().setBindingContext(bindingContext);
this.getView().setModel(oModel);
},
结果输入
答案 0 :(得分:1)
恐怕片段将在控制器初始化之前尝试加载。如果适合您,可以通过控制器添加片段。由于加载顺序,我看不到其他方法。我在下面添加了一个小例子。
以下是一些提示:
请确保在XML片段中传递视图的ID,否则您将无法使用this.byId("IDoftheControl")
访问控件。这是因为如果您通过控制器添加片段,它将不会添加视图的前缀。
添加this
作为片段实例化中的最后一个参数。如果不这样做,将不会执行添加到控件中的功能,因为找不到该片段控件的控制器。
如果它更适合您的要求,请通过VBox
或其他布局控件将其添加。如果您向视图中添加其他内容,则这样的可读性会更高。
希望这对您有帮助,多琳。
查看
<Page title="Fragment Test Page" id="idPage">
</Page>
控制器
onInit: function(){
this.onAddFragment();
},
onAddFragment: function(){
var oFragment = sap.ui.xmlfragment(this.getView().getId(), "<PathToFragment>", this);
this.byId("idPage").addContent(oFragment);
}