ResourceLoader: как загрузить конкретные функции? - PullRequest
1 голос
/ 11 марта 2012

В настоящее время я конвертирую сделанное мной расширение для 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 не устраивает и говорит мне, что моя функция не определена, даже если она присутствует в сценарии mimified генерируется загрузчиком ресурсов. Я предполагаю, что загрузчик ресурсов не видит функции щелчка, которые связаны только после анализа страницы, но я не знаю, как это исправить. Есть ли способ явно указать загрузчику загрузить определенные функции?

Кто-нибудь знает, что здесь происходит?

Ответы [ 2 ]

1 голос
/ 08 июня 2012

Это похоже на проблему, описанную в Руководстве по миграции (# Устранение неполадок) . К сожалению, известно, что режим отладки ведет себя иначе ...

1 голос
/ 08 июня 2012

Это странно.Является ли selectLanguages ​​тем же файлом, что и обработчики кликов?Я спрашиваю, потому что загрузчик ресурсов загружает модули в своей области видимости вместо глобальной области видимости.Если вы хотите получить доступ к глобальной переменной или функции, вы должны присоединить ее к объекту глобального окна следующим образом:

window.selectLanguages = function()...

Тогда:

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