Показать сообщение отдельно
  #11 (permalink)  
Старый 28.04.2012, 09:29
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

На самом деле синтаксис очень простой, постараюсь в двух словах объяснить

Допустим у нас есть коллекция:
var db = new Collection([1, 2, 3, 4, [1, 2, 3]]);


Первый способ, обращение по прямой ссылке:
// обратимся к первому элементу вложенного массива
// функция eq выбирает элемент не по ключу, а по порядку
// минус указывает, что отсчёт идёт с конца
// знак > указывает родительское отношение
db.get('eq(-1) > 0');


Второй способ, итеративный поиск с помощью функции callback:
// выберем элементы с чётными индексами
db.get(function (el, key, data, i, length, cObj, id) {
    return i % 2 === 0;
});


Третий способ схож со вторым, т.к. здесь тоже итеративный обход, но вместо прямого указания функции, мы пишем её, строчное сокращение:
// знак : обозначает, что это идёт строчное сокращение, т.е. в нашем случае оно равносильно return
db.get(':i % 2 === 0');

// логично, что мы можем написать и так
db.get(':i % 2 === 0 && el !== 2');

// или так, но здесь компилятор уже создаст 2 разных функции
// вложенность скобок не ограниченна, можно использовать операторы логики: !, &&, ||
db.get('(:i % 2 === 0) && (:el !== 2)');

// также фильтр можно заранее сохранить в стеки (как и многое другое) и обращаться по ИД
// функцию можно указывать в строчном или в явном виде, функция может содержать другие функции
db.pushFilter('odd', ':i % 2 === 0');

// используем фильтр odd и дополнительное условие
db.get('odd && (:el !== 2)');

// вызов фильтра в фильтре
db.pushFilter('filter2', 'odd && (:i % 2 === 0)');

db.get('filter2');


А последний способ - это указание контекста для фильтра, формула написания такова: контекст + >> + условие. Разумеется - это лишь малая часть возможностей, но сегодня буду писать статью на Хабр, где всё ёмкостно опишу в 1-й статье, а для подробного изучения есть мануал и дока.
__________________
kobezzza
code monkey
Ответить с цитированием