2011-10-19 57 views
0

我嘗試構建我的第一個插件。那麼遠我就又:自定義jquery插件中的調用方法

(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); 

現在我需要從init方法中調用run方法。我如何實現這一目標?

回答

1

對不起帥哥 - 我現在找到了答案。看:

methods.run.call(this); 
+0

你從哪裏申報的? –