2012-03-11 63 views
1

我目前正在將我爲MW 1.16製作的擴展名轉換爲1.18。該擴展使用JavaScript來修改頁面界面。ResourceLoader:如何加載特定功能?

因此,我現在用的資源加載如下加載我不同的腳本:

$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引擎並不開心,並告訴我我的函數沒有定義,即使它存在於模擬的腳本屬中由資源加載器提供。我的猜測是,資源加載器沒有看到只有在頁面被解析後綁定的點擊函數,但我不知道如何解決這個問題。有沒有辦法明確告訴加載器加載特定的功能?

有沒有人有關於這裏發生了什麼的線索?

回答

1

這聽起來像Migration Guide (#Troubleshooting)描述的問題。調試模式是遺憾地知道表現不同...

+0

我前一陣子解決了這個問題,但我會接受你的答案,因爲本指南證明是非常有用的升級我的代碼。 – 2012-06-11 16:05:05

1

這很奇怪。 selectLanguages與點擊處理程序在同一個文件中?我問,因爲資源加載器加載模塊在他們自己的範圍,而不是全球範圍。如果你想訪問一個全局變量或函數,你必須把它安裝到這樣的全局window對象:

window.selectLanguages = function()... 

然後:

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