OpenUI5:组件中的访问模型

时间:2016-04-14 13:52:21

标签: model components sapui5

我有一个代表Web应用程序的组件:

jQuery.sap.require("jquery.sap.resources");

jQuery.sap.declare("dividendgrowthtools.util.Helper");

Helper = {
    ...

    switchLanguage: function(sLocale) {

    // set new locale
    sap.ui.getCore().getConfiguration().setLanguage(sLocale);

    // load and set new ressource bundle
    var rootPath = jQuery.sap.getModulePath("dividendgrowthtools");

    var i18nModel = new sap.ui.model.resource.ResourceModel({
                            bundleUrl: [rootPath, "i18n/messageBundle.properties"].join("/"),
                            bundleLocale: sLocale
        });

    // does not work as it's not the component model (set to core)
    sap.ui.getCore().setModel(i18nModel, "i18n");

...

在该组件中,我设置了i18n模型。

此外,我有一个帮助对象,我想用它来切换应用程序的语言:

$(document).ready(function() {
  $('#example').DataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": "response.php", 

    "aoColumnDefs": [
      {
        "aTargets": [7],
        "mData": null,
        "mRender": function (data, type, full) {
          return '<a class="btn btn-info btn-sm" href=edit.php?id=' + full[0] + '>' + 'Edit' + '</a>';
        }             
      }]
  });
});

想法是加载并设置一个新的i18n模型。问题是,我找不到分别访问我在组件的init方法中设置的i18n模型的组件的可能性。

有人知道如何申请组件参考或如何访问组件中的模型集吗?

2 个答案:

答案 0 :(得分:0)

最简单的方法是从调用控制器传递控制器对象。您可以将助手功能更改为某事。像这样:

switchLanguage(sLocale, oController): function() {
   var oComponent = oController.getOwnerComponent();
   ...
}

然后,您将从控制器函数调用该方法,如下所示:

callMyHelperFunction: function() {
   Helper.switchLanguage("en", this);
}

答案 1 :(得分:0)

我找到的另一个解决方案如下:

  1. 像这样创建组件(以确保组件获得一个好的id):

            // create component
            var oMainComponent = sap.ui.getCore().createComponent({
                 name: "dividendgrowthtools",
                 id: "maincomponent"
            });
    
            // create and place component container
            var oComponentContainer = new sap.ui.core.ComponentContainer("componentcontainer", {
                     component: oMainComponent
            });
            oComponentContainer.placeAt("content");
    
  2. 通过Helper对象中的id获取组件引用并设置新模型:

    var oComponent = sap.ui.getCore().getComponent("maincomponent"); 
    oComponent.setModel(i18nModel, "i18n");