Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не вызывается метод плагина $.widget (https://javascript.ru/forum/jquery/22454-ne-vyzyvaetsya-metod-plagina-%24-widget.html)

Viper 20.10.2011 13:04

Не вызывается метод плагина $.widget
 
Решил начать изучать Widget factory, и столкнулся с такой проблемой.

Есть код в отдельном подключаемом файле
;(function($, window, document, undefined){
	$.widget('aurora.message', {
		options: {
			msg_type_global: 'highlight',
			msg_type_custom: false,
			msg_type_custom_container: 'highlight',
			msg_type_custom_icon: 'info',
			overrideFont: false,
			divPadding: '0 0.5em',
			divMargin: '5px !important',
			spanMargin: '0 0.3em 0 0'
		},
		createMessage: function(){
			$('<div>Test</div>').insertAfter(this.element);
		},
		_setOption: function( key, value ){
			switch (key) {
				default: this.options[key] = value;
				break;
			}

			this._update();
		},
		_update: function(){
		},
		destroy: function(){
			$.Widget.prototype.destroy.call(this);
		}
	});
})(jQuery, window, document);

В основной странице вызываю

$('#create').click(function(){
	$(this).message('createMessage');
});

Но что метод createMessage просто не вызывается. Если код из этого метода засунуть с _create то все срабатывает, но мне не нужно выполнять какие-то действия при инициализации.
В чем проблема?

PS! jquery 1.6.4/UI 1.8.16 полная версия

DjDiablo 20.10.2011 13:07

1) я чото непонял
А где вы виджет создаёте ?????
Я вижу что вы сразу пытаетесь к методу в виджите обратится, предварительно не создавая виджет

2) Это работает ?
createMessage: function(){
      alert("hello world"); 
}

Viper 20.10.2011 14:01

Цитата:

Сообщение от DjDiablo
Это работает ?

нет.
Просто перечитав доки на wiki.jqueryui.com я так понял что виджет так и создается.

DjDiablo 20.10.2011 14:53

Я перефразирую.
Сначало надо применить виджет к выборке
А только потом обращаться к методам виджета

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
         <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css"> 
         <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
         <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script> 
	</head>
<body>
<div id="test"> </div>



  <script type="text/javascript">
(function($) {

    $.widget("ui.myWidget", {
		options: {
		},

         //инициализация виджета				
        _create: function() {
                        alert("привет я метод инициализации виджета.");
		},

                // твой собственный метод
        hello:function() {
                        alert("Всем привет я пользлвательский метод");
		},

		// деинициализация виджета
		destroy: function() {			
                     
		},
			
	});
})(jQuery);

//  	$("#test").myWidget('hello'); // эта строка работать небудет. 
//      Мы неможем вызвать метод того чего не существует.


//      дальше пишем правильно

        //применяем виджет
	$("#test").myWidget();

        //обращаемся к методу виджета
        $("#test").myWidget('hello');
</script>

	</body>
</html>

Viper 20.10.2011 15:12

Все теперь понял.


Часовой пояс GMT +3, время: 20:06.