4

考虑以下代码

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)
4

1 回答 1

1

我相信 Liferay 的 JavaScript 库中没有这样的实用程序。

大多数时候人们需要在 Liferay 中做,他们只是在服务器端解析内容,然后将解析后的内容发送给客户端。通常,客户端只需要默认语言环境中的值;如果它需要更多,开发人员会找到一种方法来用 HTML 本身编写它。例如,请参见开发人员编写代码以直接在输出中创建 JS 对象input-localized标签。

这是有道理的:解析 XML 会耗费大量资源,因此人们宁愿在客户端 JavaScript 上避免它。甚至在 Liferay 中可能有一个实用程序可以做到这一点,但我会提出另一种方法:只需询问您想在 JavaScript 中使用什么并将其写入 HTML。例如,不要编写以下JavaScript代码

var names = Liferay.Util.Localization.nonExistentMethodToGetLocaleMap(layout.name);
for (var locale : names) {
     alert(names[locale]);
}

在服务器端决定显示哪些布局并编写以下JSP代码:

Map<Locale, String> names = layout.getNameMap();

<script>
    <% for (String name : names.values()) { %>
    alert('<%= name %>');
    <% } %>
</script>

不太清楚,我同意,但相当有效。

于 2013-11-18T20:01:59.313 回答