Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Collection – фреймворк для управления данными (https://javascript.ru/forum/project/27848-collection-%E2%80%93-frejjmvork-dlya-upravleniya-dannymi.html)

tenshi 31.10.2012 16:36

> http://www.collection-js.com/manual/part-3.html
> http://www.collection-js.com/manual/part-5.html

я не увидел там ничего про ключи. можешь привести пример, как выбрать всех юзеров старше 18 лет за O(log n)?

>> как это будет выглядеть с использованием сабжа?
> http://www.collection-js.com/manual/part-2.html

приведи код, а не ссылку

kobezzza 31.10.2012 16:37

Цитата:

Сообщение от tenshi (Сообщение 213280)
я не увидел там ничего про ключи. можешь привести пример, как выбрать всех юзеров старше 18 лет за O(log n)?

get(название ключа)

tenshi 31.10.2012 16:37

> // Сгруппировать по отношению старше/младше
> // и выбрать по ключу
> group(':el.age > 18').get('true')
я просил код шаблона. пофиг как делать группировку.

tenshi 31.10.2012 16:38

> get(название ключа)

как создать ключ?

kobezzza 31.10.2012 16:41

Цитата:

Сообщение от tenshi (Сообщение 213284)
> get(название ключа)

как создать ключ?

Как хочешь, статически (например ручками указав хеш) или динамически (например через группировку).

B~Vladi 31.10.2012 17:10

Цитата:

Сообщение от tenshi
потому что говоришь, что

Не засчитано.

Цитата:

Сообщение от tenshi
но я рад, что они таки решились отделить мух от котлет

Это не единственное и не самое верное решение. Видимо, ты не в курсе про layout-ы. Так что преимущества двухпроходного XSL не раскрыты.

Цитата:

Сообщение от kobezzza
Позволяет

Ну вот, тем более.

Цитата:

Сообщение от tenshi
полноценный язык программирования всяко проще разрабатывается и поддерживается

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

Цитата:

Сообщение от tenshi
сильно ограниченный xml велосипед

Это голословно.

Цитата:

Сообщение от tenshi
а это не важно где

Как раз-таки важно. XML и JSON ещё куда ни шло, а вот программный код - это уже попахивает диагнозом "говнокодер".

tenshi 01.11.2012 00:15

> Как хочешь, статически (например ручками указав хеш) или динамически (например через группировку).

зайдём с другого конца..

var c= new Collection([ /* over 9000 */ ])
...
c.add({ name: 'bob', age: 18 })
...
var mature= c.get( ':el.age >= 18' )


что нужно приписать сюда, чтобы выборка в конце происходила за O( log n )

tenshi 01.11.2012 00:28

> Видимо, ты не в курсе про layout-ы.

рассказывай

> Действительно, зачем нужны шаблонизаторы, давайте генерировать разметку программным кодом.

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

> Это голословно.

рискнёшь доказать полноту по тьюрингу?

> а вот программный код - это уже попахивает диагнозом "говнокодер"

с каких пор програмный код не годится для описания моделей данных?

ты так и не ответил на вопрос:
>> Если Collection позволяет так группировать - будет "как у тебя".
> пример кода?

kobezzza 01.11.2012 00:58

Цитата:

Сообщение от tenshi (Сообщение 213381)
зайдём с другого конца..

var c= new Collection([ /* over 9000 */ ])
...
c.add({ name: 'bob', age: 18 })
...
var mature= c.get( ':el.age >= 18' )


что нужно приписать сюда, чтобы выборка в конце происходила за O( log n )

Укажи в конструктор не массив, а хеш, где ключи являются возрастом и будет тебе счастье. А ещё лучше научись читать или перестань употреблять странные таблетки, я тебе уже давал и ссылки, где можно было прочитать и здесь писал.

Из мана на сайте либы:
// Создадим коллекцию, каталог музыкальных иснтрументов:
// первичный уровень таблицы будет хеш-таблицей, где ключ — тип инструмента
var db = new Collection({
	guitar: {
		fender: [
			{model: 'JAGUAR BLACKTOP HH RW BLK', price: 27921},
			{model: 'STRATOCASTER BLACKTOP HH MN BLK', price: 28390},
			{model: 'STANDARD TELECASTER ', price: 18518}
		],
		gibson: [
			{model: 'CUSTOM SHOP LES PAUL CUSTOM EB/GH', price: 159505},
			{model: 'LES PAUL STUDIO FIREBURST CHROME HARDWARE', price: 50525}
		]
	},
	bassGuitar: {
		fender: [
			{model: 'STANDARD JAZZ BASS RW Sunburst', price: 32205},
			{model: 'STANDARD PRECISION BASS', price: 30640}
		]
	}
});

// Теперь выберем все гитары фирмы fender
// для этого сделаем прямой запрос через get
db.get('guitar > fender');

// Выберем модели, дешевле 20-ти тысяч
db.get(':el.price < 20000'); // Ошибка, свойство price не найдено,
                             // Т.к. отсчёт идёт с самого первого объекта, а не с guitar > fender

// Чтобы установить нужную точку отсчёта, установим активный контекст
db.newContext('guitar > fender');

// Теперь снова сделаем get запрос
db.get(':el.price < 20000'); // Всё ок, т.к. теперь задан нужный контекст обхода

// В случае задания в get прямой ссылки, она также будет теперь отталкиваться от активного контекста
db.get('guitar > fender > 0'); // Ошибка
db.get('0'); // Вернёт запрашиваемый элемент


А теперь скажи, раз у тебя такая упер-пупер либа, как ты сделаешь выбор типа LIKE по произвольному полю без переборов?

PS: А вообще я устал с тобой спорить, я знаю такой тип людей, вроде тебя, и знаю что это глупое занятие. Общайся сам с собой, а я буду общаться с адекватными людьми.

tenshi 01.11.2012 02:27

> Укажи в конструктор не массив, а хеш, где ключи являются возрастом и будет тебе счастье.

не будет. в качестве домашнего задания предлагаю разобраться почему.

а вот задание на две пятёрки:

var c= new Collection([ /* over 9000 */ ])
...
c.add({ name: 'bob', age: 18 })
...
var mature= c.get( ':el.age >= 18' )
var rich= c.get( ':el.salary >= 9000' )


условия те же - O( log n )

> как ты сделаешь выбор типа LIKE по произвольному полю без переборов?

поисковые системы же это как-то делают


Часовой пояс GMT +3, время: 20:52.