Имеется ли опыт использования Matreshka.js?

Добрый день. Имеется ли у кого опыт использования Matreshka.js в реально работающих проектах? Имеются ли подводные камни, на которые вы нарвались вв процессе разработки? Поковырялся в туторе, вроде всё интересно и понятно, интересно попробовать на реальных проектах. Вопрос относится и к балалайке.
  • Вопрос задан
  • 1367 просмотров
Решения вопроса 4
Finom
@Finom
Сразу скажу, я очень предвзят, так как являюсь старшим автором Матрешки и автором балалайки.

Не буду воспевать дифирамбы, просто кратко расскажу, в чем смысл Матрешки.
1. Классическое наследование основанное на классах используется уже очень давно и очень многими программистами. В интернете вы можете найти тысячи реализаций функции Class. Здесь просто не может быть никаких подводных камней.
2. Двустороннее связывание - достаточно простая штука. Я приводил в комментарии к одной из статей, как это работает. Очень маловероятно, что вы столкнетесь с какими-нибудь проблемами. По поводу байндинга, основанного на CSS селекторах: можно передавать DOM узел, jQuery коллекцию, HTML код и прочее. Соль в том, что вы получаете ноды в JS коде, а не наоборот (данные в HTML коде).
3. Прослушивание событий изменения свойства тоже вещь не сложная. На свойство просто навешивается акцессор (сеттер), который вызывает обработчики.
4. MK.Object - это тот же ООП класс, который просто разделяет данные от не-данных. И, кстати, может содержать совершенно произвольную структуру данных, как и MK.Array.
5. MK.Array - это коллекция с достаточно простым API и автоматическим рендерингом. При вызове какого-нибудь метода, класс смотрит, какой именно метод вызван и запускает оптимизированный механизм рендеринга. Т. е. при использовании метода push, вставляется новый узел в конец контейнера, не перерисовывая всю коллекцию заново.

Какие есть подводные камни, на мой взгляд:
Многоуровневые делегированные события могут запутать. Например, событие "a@@change:x" (в свойстве "a" содержится коллекция коллекций, в последней содержутся модели, изменения свойства "x" которых, мы слушаем) заставляет напрячь извилины, поэтому их использование не рекомендуемо.

Многие программисты очень сильно мудрят с использованием привязок, вставляя в setValue и getValue сложные манипуляции с DOM и ajax запросы. Этого делать не рекомендуется, так как DOM - штука медленная, сложные манипуляции могут отразиться на производительности, а ajax запросы вовсе асинхронны (синхронные запросы будут убраны из вебкита в скором). Привязки должны быть максимально простыми.

По поводу Балалайки даже не знаю, что сказать. Это просто очередная jQuery-like либа с очень небольшим набором методов. Единственный подводный камень - это то, что там нет привычных возможностей, их прийдется дописывать самостоятельно. Если не хочется, возьмите Зепто, например.
Ответ написан
Простой, шустрый. Как матрешка
Для проектов, где не нужно тащить мастодонтов типа ангуляра. Осваивается за вечер, интуитивно понятный.
Вполне достоин попасть в копилку разработчика
Ответ написан
Комментировать
@NETChaser
По причине того что проект ещё "молод" использовать бы не стал. Обязательно наткнетесь на грабли, которые в других фреймворках уже скорее всего решены. Совместимость кода, наличие готового кода могут затянуть проект. И человек который будет доделывать/переделывать ваш код скорее всего не знает Matreshka.js.
Ответ написан
Комментировать
Из "камней" когда глядел документацию не увидел как можно создать модель MK.Object содержащую MK.Array с сериализаций в/из JSON, MK.Array содержащий другой MK.Array вроде как можно, но это не решает проблемы когда объект содержит два и более массива связанных записей, что имхо является вполне нормальной моделью.

Идея биндинга на CSS селекторах слегка коробит т.к. модель будет зависеть от вида.

Будет, небольшой проект может и попробую, а пока knockout :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час