SAPUI5三种i18n文本获取方式的性能、可靠性差异问询
SAPUI5三种i18n文本获取方式的差异分析
先直接说结论:三种方式在核心逻辑上高度重合,但在可靠性场景和调用层级上存在细微区别,性能差异可以忽略不计。
各方式的底层逻辑拆解
方式1:
getModel("i18n").getProperty("%WANTED_PROPERTY%")
SAPUI5的ResourceModel(i18n模型的类型)内部对getProperty做了封装,调用这个方法时,底层会自动触发getResourceBundle().getText()来获取文本。这是官方提供的快捷调用方式,省去了显式获取资源包的步骤。方式2:
getModel("i18n").getResourceBundle().getText("%WANTED_PROPERTY%")
这是更直接的底层调用流程:先获取i18n模型,再拿到对应的资源包实例,最后调用资源包的getText方法。和方式1的核心逻辑完全一致,只是把方式1内部的步骤拆开来写了。方式3:
getView().getModel("i18n").getResourceBundle().getText("%WANTED_PROPERTY%")
这里的关键差异在于getModel的上下文是**视图(View)**而非当前控制器(假设this指向控制器)。SAPUI5的模型查找遵循层级规则:- 如果当前View没有单独设置过
i18n模型,会向上查找父控件、最终找到Component层面的全局i18n模型,此时和前两种方式效果完全一致; - 如果当前View被单独设置了独立的
i18n模型,那么获取到的就是View专属的资源包,而非全局的——这是和前两种方式最核心的可靠性差异点。
- 如果当前View没有单独设置过
性能与可靠性对比
- 性能:三种方式的性能差异可以忽略。方式1比方式2多一层方法调用,但这层调用极轻量;方式3多了
getView()的属性访问,同样开销极小,不会对应用性能产生影响。 - 可靠性:
- 方式1和方式2在控制器中调用时,默认获取的是Component层面的全局i18n模型,除非控制器自身被单独设置了同名模型(这种场景极少),所以结果稳定可控;
- 方式3需要额外注意:如果View存在独立的i18n模型配置,会获取到View专属的文本,这可能是预期内的场景,但如果是误配置,就会导致文本获取错误。
总结
- 如果只是想获取全局i18n文本,方式1和方式2可以随意选,完全是使用偏好问题;
- 方式3适合需要获取View专属i18n文本的场景,否则建议优先用前两种,避免因View模型配置导致的意外问题。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

