2011-03-11 80 views
0

我有一個插件可以使用不同的方法加載數據。我目前使用一個標誌和一個if來運行正確的功能。我想弄清楚如何使用函數指針。使用不同功能加載數據

這裏是一個片段:

$.fn.shureTable = function(options) { 
    var defaults = { 
     loadMethod: populateFromArray 
    }; 


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

     function loadJson(json) { 
      if (json.appendMode == 0) 
         jQuery('tbody', $this).empty(); 

      options.loadMethod(json.Rows); 
     } 
     function populateFromArray(rowArray){ 
     } 
    } 
} 

我得到一個錯誤,說populateFromArray是不確定的。如何使用options控制使用哪個功能?

回答

0

由於範圍,您正在遇到問題。該函數不可用,因爲它在每個語句中。

但是,你可以像this這樣的東西,並作出選項列表,然後傳遞你想使用的選項。同樣,你可以做到這一點,所以你可以通過自定義函數。

<p id="red">Red colored</p> 
<p id="green">Green colored</p> 
<p id="blue">Blue colored</p> 

<div>This is a custom function</div> 

(function($){  
    $.fn.extend({ 
     color: function(method){ 
      // list of possible methods 
      var methods = { 
       red: function(a){ return '<span style="color:red;">'+a+'</span>' }, 
       green: function(a){ return '<span style="color:green;">'+a+'</span>' }, 
       blue: function(a){ return '<span style="color:blue;">'+a+'</span>' }, 
      } 
      // assign the appropriate function based on the "method" argument 
      var func = methods[method] || function(a){ return a; }; 

      // run through the elements and apply that function 
      return this.each(function(i,e){ 
       $(e).html(func($(e).html())); 
      }); 
     }, 
     color2: function(func){ 
      func = func || function(a){ return a; }; 
      return this.each(function(i,e){ 
       $(e).html(func($(e).html())); 
      }); 
     } 
    }); 
})(jQuery); 

$('p').each(function(i,e){ 
    $(e).color($(e).attr('id')); 
}); 

$('div').color2(function(a){ 
    return '<b style="color:#FF00FF">'+a+'</b>'; 
}); 

color可以傳遞在方法對象中找到的名稱。 color2可以傳遞一個完整的函數,所以你可以擴展你想要做的事情。 (你可以檢查參數並根據參數的類型改變行爲,但這是爲了演示)。