2015-04-21 25 views
-2

我正在開發一個新的JavaScript功能,其中我有一個媒體集合(img,video,txt ...),用戶可以添加一個新的媒體,一旦媒體被添加到集合中時,新的異步請求被髮送到服務器以檢查添加的媒體縮略圖是否已經存在。如果是這樣,則將縮略圖添加到集合中的媒體元素。 這個如果縮略圖檢查代碼存在:無法保持索引使用setTimeout

if (!img.width) { 
    setTimeout(_.bind(function() { 
    if (img.width) { 
     this.$("mySelector").first().removeClass("nocover ").css('background-image', 'url('url of thumbnail'); 
    } 
    }, this), 15000); 
} 

我的問題是如何保持的索引的元素,其檢查請求被髮送到服務器,因爲因爲這是異步函數有時同時的請求縮略圖檢查正在處理中,用戶可以添加新的媒體元素,然後將縮略圖添加到錯誤的元素中。因爲我參考新元素的唯一方法是: this。$(「mySelector」)。first()

回答

0

您可以在設置超時時將元素綁定到函數。這可以確保在調用回調時提供與綁定相同的參數。

if (!img.width) { 
    setTimeout((function ($elem) { 
    if (img.width) { 
     $elem.removeClass("nocover ").css('background-image', 'url(url of thumbnail)'); 
    } 
    }).bind(this, this.$("mySelector").first()), 15000); 
} 
+0

謝謝它確實工作:) – Jacob