2014-09-22 89 views
0

我想編寫一個javascript/jquery插件,以便它足夠通用,可用於任何框架,如angularjs,backbonejs,ember等。我應該足夠通用,以便它應該使用指令,如果它與主幹一起使用時使用角度和主幹原生功能。如果是的話,有沒有可能有人指導我如何?如何編寫靈活和通用的JavaScript模塊或插件

+0

不知道是什麼你的插件是如何建議你如何使它成爲通用的? – BenjaminPaul 2014-09-22 10:50:47

回答

0

我能想到的最自然的方式就是寫在香草JS中。這將使它在每個框架中都可以工作,而無需擔心。

如果你想繼續使用這條路線,我會使用驅動程序式的實現,將所有東西都管理到特定的驅動程序。您需要爲每個驅動程序定義所需的每種方法,然後將電話自動轉發給正確的驅動程序。

var myPlugin; 

(function() { 
    myPlugin = function(framework) { 
     var me = {}, 
      framework = framework || 'angular'; 

     me.frameworks = { 
      angular: new AngularDriver, 
      backbone: new BackboneDriver, 
      ember: new EmberDriver 
     }; 

     // Call a method framework-agnostically 
     me.fire = function(method, args) { 
      if (!me.frameworks.hasOwnProperty(framework)) { 
       console.log('Error: Framework not recognised.'); 
       return; 
      } 

      if (!me.frameworks[framework].hasOwnProperty(method)) { 
       console.log('Error: Method not found in ' + framework + '.'); 
       return; 
      } 

      me.frameworks[framework][method].apply(this, args); 
     } 

     return me; 
    } 

    function AngularDriver() { 
     var me = {}; 

     me.test = function() { 
      console.log('Hello from the Angular Driver'); 
     } 

     return me; 
    } 

    function BackboneDriver() { 
     var me = {}; 

     me.test = function() { 
      console.log('Hello from the Backbone Driver'); 
     } 

     return me; 
    } 

    function EmberDriver() { 
     var me = {}; 

     me.test = function(arg) { 
      console.log('Hello from the ' + arg + ' Ember Driver'); 
     } 

     return me; 
    } 
})(); 

var instance = new myPlugin(); 
instance.fire('test'); 
instance = new myPlugin('ember'); 
instance.fire('test', ['best']); 

這是完全可能的,有實現myPlugin.fire功能稍微乾淨的方式,如果別人可以提高該位左右instance.fire('test', ['best'])語法是有點清潔,隨時:-)