将动态片段绑定到视图

时间:2018-08-31 09:48:20

标签: sapui5

我想通过视图动态加载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);
    },

结果输入

enter image description here

结果片段 enter image description here

1 个答案:

答案 0 :(得分:1)

恐怕片段将在控制器初始化之前尝试加载。如果适合您,可以通过控制器添加片段。由于加载顺序,我看不到其他方法。我在下面添加了一个小例子。

以下是一些提示:

  1. 请确保在XML片段中传递视图的ID,否则您将无法使用this.byId("IDoftheControl")访问控件。这是因为如果您通过控制器添加片段,它将不会添加视图的前缀。

  2. 添加this作为片段实例化中的最后一个参数。如果不这样做,将不会执行添加到控件中的功能,因为找不到该片段控件的控制器。

  3. 如果它更适合您的要求,请通过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);
    }