Вызов подметода плагина jQuery
Добрый день.
Делаю плагин. Структура примерно такова:
methods = {
init: function() {...},
messages: {
msgBox: function () {...},
toolTip: function () {...}
}
};
Обработчик вызова методов стандартный:
$.fn.myplugin = 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 not found!");
}
};
Плагин я вызываю тоже стандартно:
$("#testdiv").myplugin()
Подскажите как вызвать подметод toolTip из метода messages? Спасибо. |
я не вижу у тебя метода messages откуда можно было вызвать tooltip, есть только обьект messages.
Ещё очень радует термин подметод :) пока всё что я вижу, дак это то что. 1)если вызвать $("#testdiv").myplugin("init')-сработает функция init. 2)если вызвать $("#testdiv").myplugin(" messages')-будет ошибка. 3)если вызвать $("#testdiv").myplugin({x:100})-будет вызван метод init, и обьект {x:100} будет передан ему в качестве параметра. 4)если вызвать $("#testdiv").myplugin([100,300,400])-будет вызван метод init, и массив [100,300,400] будет передан ему в качестве параметра. alert (typeof [10,200]); 5) если вызвать $("#testdiv").myplugin("hello")-будет выполнен $.error("Method not found!"); 6) если вызвать $("#testdiv").myplugin() -будет выполнен $.error("Method not found!"); Опиши задачу подробнее. |
Я не претендую на правоту, написал как понимаю, хотя ошибку вижу свою :)
Получается messages это свойство объекта methods, а toolTip это метод messages. Верно? Мне надо вызвать именно метод toolTip. Я не соображу как? Что-то типа:
$("#testdiv").myplugin("messages[toolTip]", {аргументы})
|
кажется я понял.
messages[toolTip]- клёво ты придумал, такое можно разобрать регулярным выражением :) однако если написать через точку то будет достаточно метода split.
$("#testdiv").myplugin("messages.toolTip", {аргументы}).
простой пример
m=method.split('.');//[messages,tooltip]
methods[m[0]][m[1]].apply(this, Array.prototype.slice.call(arguments, 1)
пример с учётом переменной длинны m, при этом method может оказаться функцией а не обьектом
m=method.split('.');//[messages,tooltip]
metitem=methods;
for (var i = 0; i < m.length; i++) {
metitem=metitem[m[i]];
}
metitem.apply(this, Array.prototype.slice.call(arguments, 1)
за точность не ручаюсь, лучше код перепроверте. |
Спасибо. Буду пробовать. О результатах напишу, может кому-то пригодиться.
|
Получилось сделать вот так:
Добавил в функцию вызова метода:
else if (/\./.test(method)) {
var m = method.split('.');
return methods[m[0]][m[1]].apply(this, Array.prototype.slice.call(arguments, 1));
}
Спасибо за подсказку! |
| Часовой пояс GMT +3, время: 10:44. |