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 文字列として保存されていることを知っています。このxml文字列と言語IDを使用してレイアウトの名前だけを取得するJavaScript APIがあるかどうか疑問に思っていました。以下と同じことを行うためのJava APIがあります。もしあれば、同等のJavaScript APIが必要です。

layout.getName(locale)

また

LocalizationUtil.getLocalization(String xml, String languageId)
4

1 に答える 1

1

Liferay の JavaScript ライブラリには、そのようなユーティリティはないと思います。

ほとんどの場合、Liferay で行う必要があります。サーバー側でコンテンツを解析し、解析したコンテンツをクライアントに送信するだけです。多くの場合、クライアントはデフォルト ロケールの値のみを必要とします。さらに必要な場合、開発者はそれを HTML 自体に記述する方法を見つけます。たとえばinput-localized開発者が出力で直接 JS オブジェクトを作成するコードを記述するタグを参照してください。

これは理にかなっています。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 に答える