gpt4 book ai didi

javascript - "eval is evil",但我有选择吗?

转载 作者:行者123 更新时间:2023-11-28 12:45:27 26 4
gpt4 key购买 nike

我为我正在从事的项目提出了一些自定义本地化解决方案。我的想法是我的 HTML 可以包含以下内容:

<h2 data-l10n="HELLO" data-l10n-params="['Visitor', new Date()]"></h2>

当页面启动时,将运行如下 JavaScript 函数:

localizeAll: function(sel) {
var selector = sel || document,
$o = $(selector);

$o.find('[data-l10n]').each(
function() {
var $t = $(this),
val = $t.attr('data-l10n'),
params = $t.attr('data-l10n-params'),
po = null;

if (typeof params !== 'undefined') {
po = eval(params);
log(params, po);
}

var res = doLocalize(val, po);

if (res[0] !== '<') {
$t.text(res);
} else {
$t.text(val);
}
});

}

所以基本上我们搜索具有 data-l10n 属性的任何元素,并为每个对象调用 doLocalize() 。此外,该元素可以有一个 data-l10n-params 属性,它只是一个可以解析为数组的字符串文字。该字符串被评估(params 字符串变成 po 数组),并且 po 作为可选参数提供给 doLocalize()第二个参数。

因此,Firebug 中的输出(来自 log(params, po); 语句)为:

['Vistor', new Date()] ["Vistor", Date {Thu Nov 17 2011 10:10:31 GMT+0100 (CET)}]

所以是的,我正在使用 eval。是的,我知道“评估是邪恶的”。但偶尔,我需要向 doLocalize() 传递一个参数。

如果没有评估,这怎么能完成?

最佳答案

我认为你的问题在于你在 HTML 中有效地嵌入了 JavaScript(这违反了 unobtrusive JavaScript 原则)。

在您的位置,我将添加一个额外的 l18n-params.js 文件,其中包含以下内容:

var dataL10Nparams = {
HELLO = ['Visitor', new Date()]
}

现在不用从 HTML 属性读取参数并评估,只需调用:

dataL10Nparams['HELLO']

关于javascript - "eval is evil",但我有选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com