2011-02-08 19 views
0

我有一個插件聲明像這樣。jquery插件其中輸入可以是選項,方法名稱或方法名稱與選項

(function ($) { 
    var settings = { 
     setting 1: undefined 
    }; 

    var methods = { 
     init: function (options) { 
      var data = $(this).data('myPlugin'); 

      if (!data) { 
       //initialize plugin 

       $(this).data('myPlugin', { 
        setting1: settings.setting1 
       }); 
      } 
     }, 
     doSomething: function() { 
      //...do some work 
     } 
     sendData: function(data) { 
      //TODO: Post data to the server 
     } 
    }; 

    $.fn.myPlugin = function (options) { 

     if (methods[options]) { 
      return methods[options].apply(this, Array.prototype.slice.call(arguments, 1)); 
     } else if (typeof options === 'object' || !options) { 
      methods.init.apply(this, arguments); 
      return methods.home.apply(this, arguments); 
     } else { 
      $.error('Method ' + options + ' does not exist in jQuery.myPlugin'); 
     } 
    }; 

})(jQuery); 

當我使用它像這樣

$('#myId').myPlugin({ setting1 : 'someValue' }); 

,當我想要做這樣的事情

$('#myId').myPlugin('doSomething'); 

,但我怎麼能修改上面的代碼來支持這個這個偉大的工程。 ..

var myData = 'some data'; 
var moreData = 'some more data'; 
$('#myId').myPlugin('sendData', { data: myData, moreData: moreData }); 

...我可以通過在任何我想要的作爲第二個參數,並有該參數傳遞給函數?

回答

1

這樣的事情應該工作(尼斯它在適當情況下)

if(typeof options == "object") { 
    // settings 
} else { 
    // action (better to explicitly check for string and undefined though) 
    if(arguments.length > 1) { 
    var action_options = arguments[1]; 
    } 
}