Вызов подметода плагина 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, время: 12:02. |