Изотоп - сортировка элементов.Сначала этим, а потом этим - PullRequest
2 голосов
/ 12 марта 2012

Вот JSFiddle к тому, что я до сих пор работаю: http://jsfiddle.net/FmBFt/1/ Моя проблема заключается в адаптации демо-кода для выполнения того, что я хочу.Документы по изотопам не очень полезны для таких нуб-кодеров, как я.

Чтобы объяснить, что мне нужно

Я использую ISOTOPE иесть 6 категорий.Каждая категория будет иметь любое количество полей внутри.Таким образом, в категории «Сирень» может быть 3 коробки, а в зеленой категории - 8 блоков и так далее.У меня есть список ссылок на каждую категорию.При нажатии на название категории (например, сиреневая категория) мне нужно, чтобы все поля с верхней лиловой рамкой были отсортированы по имени класса «l» и перемещены в верхнюю часть.Затем я хочу, чтобы эти сиреневые ящики были отсортированы в порядке добавленной даты, причем самое последнее поле отображается первым.Мне бы хотелось, чтобы эта функция сортировки применялась ко всем категориям, но на самом деле не знаю, как это сделать.

Я заметил, что вы можете сортировать по "дате-категории", но все, что делает, это группирует все категории вместе, это не перемещает определенную категорию в верхнюю, как мне нужно.

IПонятия не имею, как приспособить http://jsfiddle.net/FmBFt/1/, чтобы делать то, что я хочу, кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ: Ну, у меня есть один ответ, который просто смутил меня до чертиковно я почти уверен, что моя проблема связана с функцией getSortData в моем JS:

    getSortData : {
      blogs : function( $elem ) {
        return $elem.find('.blogs');
      },
      symbol : function( $elem ) {
        return $elem.attr('data-symbol');
      },
      category : function( $elem ) {
        return $elem.attr('data-category');
      },
      number : function( $elem ) {
        return parseInt( $elem.find('.number').text(), 10 );
      },
      weight : function( $elem ) {
        return parseFloat( $elem.find('.weight').text().replace( /[\(\)]/g, '') );
      },
      name : function ( $elem ) {
        return $elem.find('.name').text();
      }
    }

Вызов категории в приведенном выше коде выглядит так, как будто это можно сделать, но мне просто нужно выяснить, как это настроить,на данный момент все, что он делает, это группирует все категории вместе, но мне нужно группировать по одной за раз ... кто-нибудь?

Ответы [ 2 ]

1 голос
/ 10 ноября 2012

Я искал другой ответ, когда искал решение именно этой проблемы.В моем случае сортировка по платформам по названиям игр.Он обладает невероятной техникой и глубиной, и я вижу, как ты заблудился.

Вот один элемент из getSortData, который я использовал:

flash : function ( $elem ) {
    if ($elem.find('.platform').text() == "Flash") {
        return $elem.find('.modes').text();
    } else {
        return "Z";
    }
}

Что я делаюздесь проверяется, является ли значение, которое вы в противном случае просто вернули бы, тем, что я хочу, т.е."Вспышка".Если это так, то возвращается прекрасно.Вы также можете присвоить ему значение 0. Затем, если что-то еще, вы возвращаете значение «БОЛЬШЕ», чем желаемое значение.

Так что в моем случае моим первым значением было Flash, а затем все остальные значения были установлены на Z. Если вы хотели, вы могли бы даже иметь несколько проверок.«if elseif elseif» для сортировки нескольких вещей до вершины.

Надеюсь, это поможет.

0 голосов
/ 12 марта 2012

Здесь задействованы две разные части.Во-первых, у нас есть сама сортировка.Это регулируется изотопом, и это не ваше дело.Вам нужна вторая часть: компаратор.

Компаратор - это определенная вами функция, которая возвращает своего рода «ключ».isotope сравнивает все ключи и сортирует их естественным образом (тексты сортируются по ascii: '1', '10', '100', '11', '2'), числа сортируются по значению (1, 2, 10, 11, 100).

Вот что getSortData() делает:возвращает несколько функций, которые изотоп может использовать для создания ключей.При сортировке необходимо указать, какую функцию использовать.Если вы укажете foo, то изотоп будет вызывать getSortData().foo(x) для каждого сортируемого узла, где x заменяется на каждый узел.

После создания этого списка ключей изотоп будет сортировать ключи (и сэту информацию сами узлы).

Так что нужно для хорошего генератора ключей.Мое предложение состоит в том, чтобы преобразовать дату в миллисекунды, а затем это число в строку, а слева добавить это значение 0. См. Этот ответ для дополнения слева: Как я могу дополнить значение начальными нулями?

Затем добавьте эту строку с «1», если класс равен «l» или «0», в противном случае:

return (cls == 'l' ? '0' : '1') + zeroFill( dateInMillis, 16 );

Сначала будут отсортированы поля с правильным классом («0» меньше, чем «1»).'), а затем сортирует каждый тип ящика по дате.

В качестве альтернативы, вы можете присвоить каждому ящику с неправильным классом один и тот же ключ (чтобы они не меняли порядок):

return (cls == 'l' ? zeroFill( dateInMillis, 16 ) : 'xxx');
...