Pull to refresh

Comments 17

Использую Knockout в проекте и не могу сказать, что документация у него хорошая. Она неполная, нет того, что можно было бы назвать Reference. Но она завлекательная: классное видео с MIX11, где Стив Сандресон — автор фреймворка — за двадцать минут убедил меня, что MVVM — это именно то, что нужно на клиенте, а также заставил меня отказаться от Backbone, о чем, я, кстати, ни секунду не жалел. Примеры тоже впечатляют, есть ремарки на тему подписок — на каждое observable-поле можно подписаться — колбэк будет вызываться при изменении значения.

Но проблемы тоже есть. Например, на этой неделе вскрылось, что JSON сериализатор в нокауте не умеет работать с датами (Date object) вообще — при сериализации получаем null. Кроме того, не всегда понятно, когда в аттрибутах data-bind нужно писать выражения в кавычках или добавлять скобки для observable полей — понимание приходит с опытом, но не без необходимости пробежаться дебаггером по исходникам Нокаута.

Что еще? Темплейты не всегда подходят — иногда приходится собирать фрагменты DOM руками, и в этих случаях Knockout совсем не помогает, а может быть даже мешает, т.к. интеграция с ним требует дополнительных затрат кода.

Ну и наконец, однажды написав data-bind=«click: someHandler», я задумался: а чем же это отличается от onclick, которого все так боятся и ненавидят?..
Я сам так больше не пишу, а наличие клик-байндинга в фреймворке считаю ошибккой.
Спасибо вам за коммент, именно такой опыт особенно ценю, а не «завлекательные» видео с конференций.
> заставил меня отказаться от Backbone, о чем, я, кстати, ни секунду не жалел

Очень хочется большего раскрытия темы. Я вот написал небольшое приложение с Бекбоном и очень доволен; хочется услышать, что плохо и как бывает лучше.
> а также заставил меня отказаться от Backbone, о чем, я, кстати, ни секунду не жалел.

Очень хочется более подробного раскрытия темы. :)
Млин, хабр, я тебя обожаю. Спасибо, что дал мне возможность запостить одно и то же дважды. 40 минут, конечно, недостаточно, чтоб показать мне мой первый комментарий. :(
20 минут, существенная разница ;)
14:03 и 14:40 между первым и вторым комментарием.
Стал писать комментарий, который, я смотрю, стал розростаться до размеров статьи. Давайте я ее до ума доведу и опубликую на днях.
О, клëво. Боюсь только, что пропущу. Если будет не очень сложно, то какой-нибудь комментарий здесь со ссылкой было бы клëво получить (да и потом для референса будет видно, куда идти читать дальше :)).
Но проблемы тоже есть. Например, на этой неделе вскрылось, что JSON сериализатор в нокауте не умеет работать с датами (Date object) вообще — при сериализации получаем null.


А формат JSON и не предполагает иметь Date object в качестве значений.
Не скажите. В JSON.stringify подазумевается, что если у объекта есть метод .toJSON(), то следует для сериализации использовать его. И в нативной реализации, и в json2.js такой метод определяется для прототипа Date [1]:

github.com/douglascrockford/JSON-js/blob/master/json2.js#L175

Кроме того, при десериализации в качестве второго параметра можно передать функцию-трансформер, которая может преобразовывать элементы json-объекта. В комментариях к методу как раз и указан пример правильной обработки дат:

github.com/douglascrockford/JSON-js/blob/master/json2.js#L103

Так что, хотя с точки зрения JSON как формата данных дат не существует, с точки зрения JSON как api браузеров даты есть. Я считаю, что это не проблема JSON, а проблема Knockout.

[1] Да-да, Дуг Крокфорд тоже переопределяет прототипы!
И да, сериализатор дат работает в соответствии с ISO форматом, так что на сервере никаких проблем с разным поведением .toString() не возникает.
Кстати, если уж на то пошло, зачем тут бэкенд вообще? JSONP и всë будет работать на стороне клиенте.
А я (как обычно на скорую руку) собирал проект с KnockOutJS — запутался в bind-ах. Иногда срабатывала функция по имени, иногда — только по полному имени «click: SearchViewModel.search». До сих пор не ковырял :)

В целом — очень понравилась библиотека, но, соглашусь с <a href=«alist.habrahabr.ru» class=«user_link>alist — иногда приходится „руками“ — и тогда приходится городить огороды.

Кстати, сейчас вот, собираюсь засесть за observableArray — чтобы биндить переменные для данных, внутри данных, внутри данных (угу, вот такая засада) :)

Backbone — отпугнул обилием кода ради простого действа (наткнулся на обзор на хабре).
ой, сорри за ссылку косую :(
Sign up to leave a comment.

Articles