同位素动态排序

我正在使用jQuery Isotope插件(http://isotope.metafizzy.co/)这很棒,但我在创建排序时遇到问题。 它更像是一个JavaScript问题而不是与Isotope本身有关的问题。

问题是我正在动态构建排序数据。 所以我创建了一个生成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对象的方法,该对象将允许传递正确的排序名称。

有想法的人吗?

得到它了…

真正需要的是允许sort字段名称变量在匿名排序函数中具有本地范围。 因为我无法将sort字段直接传递给匿名函数(因为它是由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()); } }