0

2つのテンプレートファイルがあります。1つはフォーム用(loginFormTemplate)で、もう1つはダイアログ用(dialogTemplate)です。それらをまとめると、フォームにはi18n($ {i18n.username}など)しか表示されませんが、ダイアログhtmlには${undefined}と表示されます。nlsファイルで明確に定義しました。なんで?ダイアログを作成するときのコードは次のとおりです。

        var template = lang.replace(dialogTemplate, {
            form: loginFormTemplate                
        });

        var contentWidget = new (declare(
            [_Widget, _TemplatedMixin, _WidgetsInTemplateMixin],
            {
                templateString: template,
                i18n: i18n   
            }
        ));

DialoTemplate内でフォームと同じように「変数」を作成し、i18n値を渡すことはできますが、あまりエレガントではありません。一度だけやりたいです。だから、代わりにそれはこのようになります。

    var template = lang.replace(dialogTemplate, {
            form: loginFormTemplate,
            _ok: i18n.okLabel,
            _cancel: i18n.cancelLabel
        });

        var contentWidget = new (declare(
            [_Widget, _TemplatedMixin, _WidgetsInTemplateMixin],
            {
                templateString: template,
                i18n: i18n   
            }
        ));

これがphusickの答えを使った私の解決策です(私のフォームは%[]と表記されています):

var template = lang.replace(
                dialogTemplate,
                {form: loginFormTemplate},
                /\%\[([^\]]+)\]/g
            );
4

1 に答える 1

1

私は自分のコンピューターではありませんが、「lang.replace」を呼び出すと「form」のみが定義されるため、「lang.replace」を呼び出すと{form}だけでなく、${i18n。*}も未定義に置き換えられると思います。

編集:i18nと文字列の連結の間の競合を回避するために、カスタムパターンで「lang.replace」を使用できます:http://livedocs.dojotoolkit.org/dojo/_base/lang#advanced-usage

于 2012-06-15T02:49:00.153 に答える