我目前正在将我为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引擎不满意并告诉我我的函数没有定义,即使它存在于由资源加载器生成的模拟脚本。我的猜测是资源加载器没有看到仅在解析页面后绑定的单击函数,但我不知道如何纠正它。有没有办法明确告诉加载器加载特定的函数?
有没有人知道这里发生了什么?
答案 0 :(得分:1)
那太奇怪了。 selectLanguages与Click处理程序在同一个文件中吗?我问,因为资源加载器在自己的范围而不是全局范围内加载模块。如果要访问全局变量或函数,则必须将其附加到全局窗口对象,如下所示:
window.selectLanguages = function()...
然后:
$('#langBtn').click(function() {
window.selectLanguages();
}
答案 1 :(得分:1)
这听起来像Migration Guide (#Troubleshooting)中描述的问题。令人遗憾的是,调试模式表现不同......