请考虑以下代码
function populateLayout(scopeGroupId){ Liferay.Service.Portal.Layout.getLayouts( { groupId: scopeGroupId,privateLayout: false },function(layouts){ for(var i=0;i<layouts.length;i++){ var layout = layouts[i]; alert(layout.name); } } ); }
正如您从上面的Liferay的JSON服务API中可以看到的那样,可以获得所有布局.我特别需要在选择框中填充布局名称.我知道该名称存储为xml字符串以支持不同的语言环境.我想知道是否有javascript api只使用此xml字符串和语言ID获取布局的名称.有一个java api用于执行相同的操作如下.如果有的话,我需要等效的JavaScript API.
layout.getName(locale)
要么
LocalizationUtil.getLocalization(String xml,String languageId)
解决方法
我相信Liferay的JavaScript库没有这样的实用程序.
大多数时候人们需要在Liferay中执行此操作,他们只需解析服务器端的内容并将解析后的内容发送给客户端.通常,客户端只需要默认语言环境中的值;如果需要更多,开发人员会找到一种在HTML本身中编写它的方法.参见例如the input-localized
tag,开发人员编写代码以直接在输出中创建JS对象.
这是有道理的:解析XML的资源成本很高,因此人们宁愿在客户端JavaScript上避免使用它.甚至可能在Liferay中有一个实用工具,但我提出了另一种方法:只需在JavaScript中询问您想要使用的内容并将其写入HTML中.例如,而不是编写以下JavaScript代码
var names = Liferay.Util.Localization.nonExistentMethodToGetLocaleMap(layout.name); for (var locale : names) { alert(names[locale]); }
Map<Locale,String> names = layout.getNameMap(); <script> <% for (String name : names.values()) { %> alert('<%= name %>'); <% } %> </script>
不太清楚,我同意,但相当有效.