0

我有两个模板文件:一个用于表单(loginFormTemplate),一个用于对话框(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},而且你的 ${i18n.*} 也会替换为 undefined,因为调用 'lang.replace' 时只定义了 'form'。

编辑:您可以将“lang.replace”与自定义模式一起使用,以避免 i18n 和字符串连接之间的冲突:http: //livedocs.dojotoolkit.org/dojo/_base/lang#advanced-usage

于 2012-06-15T02:49:00.153 回答