2012-06-17 51 views
2

我想創建一個類似彗星的東西。我有一個從php頁面收集數據的插件。問題是我不知道如何調用內部的插件。在自己內部調用一個jQuery插件

如果這是一個函數,我可以這樣做:function j() {setTimeout(j(), 1000);},但我使用的是一個jQuery插件。

這裏是我的插件代碼:

(function($) { 
$.fn.watch = function(ops) { 
    var 
     $this_ = this, 
     setngs = $.extend({ 
      'type' : 'JSON', 
      'query' : 'GET', 
      'url' : '', 
      'data' : '', 
      'wait' : 1000 
     }, ops); 

     if (setngs.type === '') { 
      return false; 
     } else if (setngs.query === '') { 
      return false; 
     } else if (setngs.url === '') { 
      return false; 
     } else if (setngs.wait === '') { 
      return false; 
     } else if (setngs.wait === 0) { 
      setngs.wait = 1000; 
     } 

     var xhr = $.ajax({ 
      type  : setngs.query, 
      dataType : setngs.type, 
      url   : setngs.url, 
      success  : function(data) { 
       var i = 0; 
       for (i = 0; i < data.length; i++) { 
        var html = $this_.html(), str = '<li class="post" id="post-' + data[i].id + '"><div class="inner"><div class="user">' + data[i].user + '</div><div class="body">' + data[i].body + '</div></div></li>'; 
        $this_.html(str + html); 
       } 
       setTimeout($this_, 1000); 
      } 
     }); 
}; 
})(jQuery); 

它說:setTimeout($this_, 1000);這就是有問題的IM。我不知道該把這個插件叫做什麼。 $this_是我認爲可能工作,但我錯了。這是我需要替換的。

感謝您的幫助。

回答

1

在這裏,我可能會利用JavaScript的call()來調用一個函數。 MDN Documentation

因此,在插件中,你可以用$.fn.watch.call(this)來調用它。傳入call的參數設置了範圍,因此傳入this以在相同範圍內調用它。

我整理了一個關於JSBin如何工作的基本示例。

您可以在setTimeout中使用它,像這樣:

setTimeout(function() { $.fn.watch.call(this) }, 1000); 

JSBin Example

希望這有助於:)

+0

怎麼樣變量$ THIS_ = $ .fn.watch; ?關閉完成的功能應該允許通話...不是100%,但似乎對我有意義。 +1雖然爲.call和討論這個上下文 –

相關問題