在自定义jquery插件中调用方法

时间:2011-10-19 08:29:04

标签: jquery jquery-plugins

我尝试构建我的第一个插件。到目前为止我来了:

(function( $ ){

  var settings = {
    key1: 't1',
    key2: 't2'
  };

  var methods = {
    init : function( options ) {

      return this.each(function() {
        var $this = $(this);

        console.log('init called');
        data = $this.data('snake');

        // If the plugin hasn't been initialized yet
        if (!data) {

          //Do setup stuff here

          $this.data('snake', {
            map: $this.find(".map"),
            stats: $this.find(".stats")
          });

          data = $this.data('snake');
        }

        if ( options ) { 
          $.extend( settings, options );
        }

        // HERE I WOULD LIKE TO CALL THE RUN METHOD AND BE ABLE TO USE settings AND data VARIABLES

      });

    },
    run : function( ) {

      var $this = $(this), data = $this.data('snake');
      console.log('run called');
      //test for settings and data
      console.log(settings);
      console.log(data);

    },
    test : function( ) {

      return this.each(function() {
        var $this = $(this), data = $this.data('snake');
        console.log('test called');
        //test for settings and data
        console.log(settings);
        console.log(data);
      });

    },
    setup : function (  ) {
      console.log('setup called');
    },
    hide : function( ) {}
  };

  $.fn.snake = function( method ) {

//    console.log('call: ' + method);

    // Method calling logic
    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 + ' does not exist on jQuery.tooltip' );
    }    

  };

})( jQuery );

现在我需要在run方法中调用init方法。我如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

对不起老兄 - 我现在找到了答案。看:

methods.run.call( this );