ResourceLoader:如何加载特定的功能?

时间:2012-03-11 02:43:31

标签: javascript jquery mediawiki

我目前正在将我为MW 1.16制作的扩展名转换为1.18。此扩展程序使用javascript修改页面界面。

因此我使用资源加载器如下加载我的不同脚本:

$commDictResourceTemplate = array(
    'localBasePath' => dirname( __FILE__ ) . '/modules',
    'remoteExtPath' => 'CommunityDictionary/modules',
);

$wgResourceModules += array(
    'ext.CommunityDictionary.jsAndCss' => $commDictResourceTemplate + array(
        'scripts' => array('jquery.dataTables.min.js','jquery.jeditable.mini.js','jquery.dataTables.editable.js'),
        'styles' => array('custom-theme/jquery-ui-1.8.16.custom.css'),
        'dependencies' => array('jquery.ui.dialog'),
    ) ,
    'ext.CommunityDictionary.dictPage' => $commDictResourceTemplate + array(
        'scripts' => array('commDict.include.js','commDict.js'),
        'styles' => array('commDict.css'),
        'dependencies' => array('ext.CommunityDictionary.jsAndCss')
    )

);

以下是commDict.js

var oTable;
var jDict;

$(loadDictPage);
function loadDictPage(){
    jDict = $($.parseXML(xmlInput));
    initDataTable()
    initEditable();
    initDelete();
    initLanguageDialog();
}

commdict.include.js包含上面调用的所有初始化函数以及绑定到接口上click个事件的一堆其他函数。绑定函数定义如下:

$('#langBtn').click(function(){
    selectLanguages();
});

selectLanguages定义如下:

function selectLanguages(){
    $('#selectLanguageDialog').dialog('open');
}

这是我得到的错误:

Uncaught ReferenceError: selectLanguages is not defined

当我在debug模式下测试我的页面时,一切都很好但是当我在非调试模式下测试时,javascript引擎不满意并告诉我我的函数没有定义,即使它存在于由资源加载器生成的模拟脚本。我的猜测是资源加载器没有看到仅在解析页面后绑定的单击函数,但我不知道如何纠正它。有没有办法明确告诉加载器加载特定的函数?

有没有人知道这里发生了什么?

2 个答案:

答案 0 :(得分:1)

那太奇怪了。 selectLanguages与Click处理程序在同一个文件中吗?我问,因为资源加载器在自己的范围而不是全局范围内加载模块。如果要访问全局变量或函数,则必须将其附加到全局窗口对象,如下所示:

window.selectLanguages = function()...

然后:

$('#langBtn').click(function() {
     window.selectLanguages();
}

答案 1 :(得分:1)

这听起来像Migration Guide (#Troubleshooting)中描述的问题。令人遗憾的是,调试模式表现不同......