我有一个按钮(创建应用程序),如果我点击一个按钮,将出现一个碎片对话框。这里能够显示碎片化的对话框。但内部化(i18n)没有出现在字段中。 (对于能够显示xml
的{{1}}个文件,但i18n
文件无法显示fragment.xml
/)
i18n
:
component.js
createContent : function() {
// create root view
var oView = sap.ui.view({
id : "app",
viewName : "sap.gss.program.view.App",
type : "JS",
viewData : { component : this }
});
var i18nModel = new sap.ui.model.resource.ResourceModel({
bundleUrl : "i18n/appTexts_fr.properties"
});
oView.setModel(i18nModel, "i18n");
return oView;
}
:
Controller.js
createApplication: function (oEvent) {
if (!this.oDialogFragment) {
this.oDialogFragment = sap.ui.xmlfragment("sap.gss.program.view.myFragment",
this);
}
this.oDialogFragment.open();
}
:
fragment.xml
答案 0 :(得分:14)
您可以使用dependents
聚合,将对话框连接到视图;您不需要明确设置任何模型。
所以在你的情况下你会这样做:
createApplication: function (oEvent) {
if (!this.oDialogFragment) {
this.oDialogFragment = sap.ui.xmlfragment("sap.gss.program.view.myFragment", this);
}
this.getView().addDependent(oDialogFragment); // <--
this.oDialogFragment.open();
}
有关详情,请参阅my answer至“What is the usage of "dependents" aggregation in SAPUI5?”。
答案 1 :(得分:4)
你也应该为对话框片段设置i18n资源模型。
createApplication: function(oEvent) {
if (!this.oDialogFragment) {
this.oDialogFragment = sap.ui.xmlfragment("sap.gss.program.view.myFragment", this);
var i18nModel = new sap.ui.model.resource.ResourceModel({
bundleUrl : "i18n/appTexts_fr.properties"
});
this.oDialogFragment.setModel(i18nModel, "i18n");
}
this.oDialogFragment.open();
}
答案 2 :(得分:1)
它往往是最简单的方式。只需ResourceModel
设置全局:
sap.ui.getCore().setModel(i18nModel, "i18n");
现在,您可以从应用程序的任何位置引用它,并像您一样绑定它,无需在视图甚至控制级别再次设置它。
答案 3 :(得分:1)
我遇到了同样的问题,因此在Component中全局和本地设置模型。它工作正常。
sap.ui.getCore().setModel(i18nModel, "i18n");
this.setModel(i18nModel, "i18n");