0

我已经构建了一个将使用模块的插件。基本上可以添加到代码中以提供附加功能的功能。

插件中有一个调用这些模块的函数。以前,我是这样称呼他们的:

processInstance($(doc).find('[data-bcp-crumbs]'), crumbs);
processInstance($(doc).find('[data-bcp-copyright]'), copyright);
processInstance($(doc).find('[data-bcp-activenav]'), activeNav);

每行的最后一部分是将在 processInstance 脚本中调用的函数的名称。因此,我将函数的名称作为字符串和每一行的第一类对象。我想把它简化成这样:

for (var i=0; i>module.length;i++) {
    processInstance($(doc).find('[data-bcp-'+module[i].toLowerCase()+']'), window[module[i]]);
}

模块数组被添加到实际模块代码的每个实例之后。我这样做是这样的:

module.push('crumbs');

这不起作用,因为 window[module[i]] 返回未定义。

我的代码需要如何修改才能使其正常工作?

这是整个插件的 jsfiddle 示例,其中插入了一个简单的模块:http: //jsfiddle.net/michaeljimmy/U8anp/1/

4

1 回答 1

0

我的一位同事帮我找到了这个问题的答案。不过,首先,我注意到 for 循环中有一个错误。我有 > 而不是 <。那没有帮助。:)

代码的概念是正确的。问题是范围。如果您查看 jsfiddle,您会发现整个东西都在一个外壳中,包括我试图调用的函数。因此,window 无法访问这些功能。我们最终做了一些简单的改变。

首先,与 module.push('crumbs') 或任何函数名一起,我们添加了:

functions.crumbs = crumbs;

然后我们不使用 window[module[i]],而是使用

functions[module[i]]

如果没有外壳,window[module[i]] 本来可以正常工作的。

于 2013-07-10T02:05:07.770 回答