我有一个代表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模型的组件的可能性。
有人知道如何申请组件参考或如何访问组件中的模型集吗?
答案 0 :(得分:0)
最简单的方法是从调用控制器传递控制器对象。您可以将助手功能更改为某事。像这样:
switchLanguage(sLocale, oController): function() {
var oComponent = oController.getOwnerComponent();
...
}
然后,您将从控制器函数调用该方法,如下所示:
callMyHelperFunction: function() {
Helper.switchLanguage("en", this);
}
答案 1 :(得分:0)
我找到的另一个解决方案如下:
像这样创建组件(以确保组件获得一个好的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");
通过Helper对象中的id获取组件引用并设置新模型:
var oComponent = sap.ui.getCore().getComponent("maincomponent");
oComponent.setModel(i18nModel, "i18n");