Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.06.2012, 19:00
Аватар для antonM
Кандидат Javascript-наук
Отправить личное сообщение для antonM Посмотреть профиль Найти все сообщения от antonM
 
Регистрация: 11.08.2011
Сообщений: 103

Вызов подметода плагина 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?

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 22.06.2012, 01:30
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

я не вижу у тебя метода 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!");

Опиши задачу подробнее.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 22.06.2012 в 01:48.
Ответить с цитированием
  #3 (permalink)  
Старый 22.06.2012, 01:52
Аватар для antonM
Кандидат Javascript-наук
Отправить личное сообщение для antonM Посмотреть профиль Найти все сообщения от antonM
 
Регистрация: 11.08.2011
Сообщений: 103

Я не претендую на правоту, написал как понимаю, хотя ошибку вижу свою
Получается messages это свойство объекта methods, а toolTip это метод messages. Верно? Мне надо вызвать именно метод toolTip.
Я не соображу как?
Что-то типа:
$("#testdiv").myplugin("messages[toolTip]", {аргументы})
Ответить с цитированием
  #4 (permalink)  
Старый 22.06.2012, 02:02
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

кажется я понял.
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)

за точность не ручаюсь, лучше код перепроверте.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 22.06.2012 в 02:29.
Ответить с цитированием
  #5 (permalink)  
Старый 22.06.2012, 02:54
Аватар для antonM
Кандидат Javascript-наук
Отправить личное сообщение для antonM Посмотреть профиль Найти все сообщения от antonM
 
Регистрация: 11.08.2011
Сообщений: 103

Спасибо. Буду пробовать. О результатах напишу, может кому-то пригодиться.
Ответить с цитированием
  #6 (permalink)  
Старый 25.06.2012, 12:44
Аватар для antonM
Кандидат Javascript-наук
Отправить личное сообщение для antonM Посмотреть профиль Найти все сообщения от antonM
 
Регистрация: 11.08.2011
Сообщений: 103

Получилось сделать вот так:
Добавил в функцию вызова метода:
else if (/\./.test(method)) {
		var m = method.split('.');
		return methods[m[0]][m[1]].apply(this, Array.prototype.slice.call(arguments, 1));
}

Спасибо за подсказку!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов ф-ции из (function($) {})(jQuery); - это возможно? JDev jQuery 7 29.05.2012 15:36
Вызов метода jQuery по ссылке Murlakatam jQuery 1 29.04.2012 19:46
Внешняя ссылка на страницу которая находится в IFRAME Модального окна плагина jQuery Андррр jQuery 0 07.12.2011 15:13
jQuery object в xpath. Глобальные события solarix jQuery 1 29.10.2010 16:40
Поиск плагина выводящего подсказки к ссылкам, jQuery. Flashton Элементы интерфейса 6 04.03.2010 20:47