簡體   English   中英

同位素動態排序

[英]Isotope Dynamic Sorts

我正在使用很棒的jQuery Isotope插件(http://isotope.metafizzy.co/),但是在創建排序時遇到了問題。 與同位素本身無關,這更多是JavaScript問題。

問題是我正在動態構建排序數據。 因此,我創建了一個使sortData的函數。 下面的例子:

function getSortData(){
    sortData = {};
    var sorts = ['symbol', 'number', 'score', 'name'];
    for (var i in sorts) {
      sortData[sorts[i]] = function($elem) {
        console.log(sorts[i]);
        return parseInt($elem.find('.'+ sorts[i]).text());     
      }
    }
    return sortData;
  }

因此,問題在於,內部的匿名函數始終在整個getSortData()函數運行之后運行。 結果是將sorts數組中的最后一項分配給了sort [i]變量。

這在此小提琴中顯示: http : //jsfiddle.net/xzZR4/您將看到'name'項目始終輸出到控制台。

我想不出另一種方法來創建getSortData對象,該對象將允許傳遞正確的排序名稱。

有任何想法嗎?

得到它了...

真正需要的是允許排序字段名稱變量在匿名排序函數中具有局部作用域。 由於無法將排序字段直接傳遞給匿名函數(如Isotope所稱,因此我無法控制傳遞給它的參數)。

因此,訣竅是創建另一個返回匿名函數的函數,該函數將字段作為參數,使其具有局部作用域。

function getSortData(){
    sortData = {};
    var sorts = ['symbol', 'number', 'score', 'name'];
    var sortField;
    for (var i in sorts) {
      sortField = sorts[i];
      sortData[sortField] = getSortDataCallback(sortField)
    }
    return sortData;
  }

function getSortDataCallback(sortField) {
  return function($elem) {
    return parseInt($elem.find('.'+ sortField).text());
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM