У меня есть файл javascript, который имеет
$.fn.comments = function (method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' doesn not exists in jQuery.comments');
return null;
}
};
Я видел intro requirejs tutorials, чтобы возвращать функции из модуля.
Но этот javascript добавляет функцию в $.fn, как мне изменить этот файл, чтобы я мог использовать requirejs?
Легкий подход:
define(
['jQuery'],
function ($) {
$.fn.comments = .. /* do side effects as per the original */;
return {
/* ehh, others don't get a useful return,
but we did our side-effect work upon jQuery (via $.fn) above */
};
});
Можно также вернуть что-то, если этот модуль имеет значение, которое может использоваться как что-то полезное в зависимом модуле, хотя самый большой крючок с плагином jQuery - это побочный эффект на $.fn
так что указанный плагин jQuery может быть доступ как $(..).plugin
. Итак, потом зависимый:
define(
['jQuery', 'jQuery_comments'], /* require comment module */
function ($, _comments) { /* but don't care about value */
/* and use plugin anyway as it already been registered
through a side-effect on $.fn */
return {
doStuff: function (..) {
$(..).comments(..);
}
};
});
В качестве альтернативы, можно вернуть comments
(function (method) {.. }
) из модуля зависимостей и использовать $.fn.comments = comments
в зависимом модуле, но я оставил бы его, как он выше, поскольку плагины jQuery являются неотъемлемо сторонними -последствия.
Работая в предположении, что это не плагин, который вы написали/поддерживаете, моя рекомендация состояла бы в том, чтобы оставить плагин в покое и использовать некоторые функции конфигурации requirejs, чтобы рассказать ему, как работать с вашим плагином.
Добавление следующего requirejs.config скажет requirejs, как обрабатывать ваш плагин.
requirejs.config({
shim:{
'jquery.comments': { // module name
deps: [ 'jquery' ], // jquery dependency
exports: 'jQuery.fn.comments' // result of the module
}
}
});
Вот еще несколько документов по этой функции: http://requirejs.org/docs/api.html#config-shim.
С этой конфигурацией, если в конечном итоге вы захотите использовать более новую версию плагина, вы можете просто вставить файл, и он должен работать, тогда как если вы внесете изменения в файл, чтобы он смоделировал шаблон requirejs, вам нужно будет сделать они снова и снова меняются, если вы захотите обновить плагин позже. Оба способа работают, но я предпочитаю это, так как это лучше для долгосрочной ремонтопригодности.