Открыть список
Как стать автором
Обновить

Комментарии 21

Лучшим дополнением к статье и к фреймворку была бы разработка todomvc проекта.
Вот ссылка todomvc.com/
да, спасибо
на самом деле todomvc уже в процессе
НЛО прилетело и опубликовало эту надпись здесь
Добавил ссылку, спасибо.

this.template = "...здесь описываем разметку...";


«Описываем разметку» не означает, что она должна быть обязательно текстом вставлена в js. Можно использовать jQuery-селектор:

this.template = "#myViewTemplate";


и, соответственно, в html:

<script id='myViewTemplate' type='text/view'>
    непосредственно разметка тут
</script>

Спасибо за упоминание (я про Warp9), с момента статьи на хабре я немного изменил внутренности (переключился на явный граф зависимостей) это позволило избежать проблем, характерных для многих реактивных библиотек. Например, с помощью Knockout легко:


Так как у вас система основана на идеях, близких knockout проверьте эти сценарии на своей библиотеке, возможно и у вас есть, что исправить :)
К сожалению пока не впечатлило, на фоне других фреймворков. И как-то мне не нравиться объект js и его роль тут.
Да, фич не много, но ведь и не было задачи повторить angular по навороченности. Скорее наоборот — JohnSmith предоставляет некий минимум, который вполне достаточен для построения рабочего приложения.

js просто содержит алиасы для доступа к функциям библиотеки, что именно с ним не так?
var firstName = js.bindableValue();   // создаём объект
...
firstName.setValue("John");           // изменяем значение объекта


то есть работа с моделью отличается от принятого в языке стандарта
user.firstName = 'John';
то есть работа с моделью отличается от принятого в языке стандарта

//  обычное присваивание значения переменной 
// не вызывает побочных эффектов
firstName = 'John';

// вызов метода setValue()
// может породить каскад обновлений
firstName.setValue('John');
в js есть setters — а значит можно аналогично породить каскад обновлений
да есть (если забыть про кросс-браузерность), но firstName в данном случае — это не просто переменная, это объект и у него кроме getValue/setValue есть и другие методы. Поэтому и работать с ним нужно именно как с объектом.
На самом деле большинство браузеров уже поддерживают их.
Но претензия звучит так — представьте метод который меняет 20-30 полей в модели и будет 20-30 строк типа

name.setValue('new name'); 
logib.setValue('login');
...
Да, если у Вас 20 свойств в ViewModel, то придётся написать

prop1.setValue('value1');
prop2.setValue('value2');
//...
prop20.setValue('value20');


но какие есть альтернативы? Обычное присваивание даст нам те же 20 строк и «спрячет» от нас то, что мы работаем с observable-объектом, а не с обычным свойством.
ну да только
this.displayName = this.firstName+ this.lastName;


смотрится лучше чем
this.displayName.setValue(this.firstName.getValue()+ this.lastName.getValue());
Обычное присваивание даст нам те же 20 строк и «спрячет» от нас то, что мы работаем с observable-объектом, а не с обычным свойством.

У observable-объектов есть ещё ощутимый минус, обычно в проектах часть данных является readonly (для рендеринга), поэтому для этого используются обычные переменные, но если на середине проекта появилась необходимость их отслеживать — это проблема.
Начну с критики, но ее следует воспринимать, как IMHO

1. Мне кажется более естественным использовать деклоративный binding (мы все равно никуда от html не уйдем, так почему бы не указывать модель там)
2. Может мне показалось, но в данном фреймворке достаточно трудно будет повторно использовать ViewModel
3. Я немного укушен ember и мне тоже не нравиться объект js (как-то оно слишком сложно)
4. Основная проблема всех шаблонизаторов, что мы не можем просто получить дочерний элемент из созданного элемента — хотелось бы видеть в библиотеке решение

Теперь немного похвалы. На самом деле, я понимаю, насколько это огромная работа и очень мощно, что Вы за нее взялись и довели до рабочего состояния.

Ну и в конце вопрос:
1. Как Вы тестируете код на кроссбраузерность? У меня в аналогичном проекте проблема: хочу чтобы оно работало во всех основных браузерах, но не хочу руками тестировать этот момент — как-то оно дорого по трудозатратам.
Как Вы тестируете код на кроссбраузерность? У меня в аналогичном проекте проблема: хочу чтобы оно работало во всех основных браузерах, но не хочу руками тестировать этот момент — как-то оно дорого по трудозатратам.


Да, у нас та же проблема. Мы используем jsTestDriver, TravisCi запускает нам тесты после каждого комита, но они прогоняются только в headless safari. Тоже хотелось бы автоматом запускать, если уж не на всех, то хотя бы на нескольких основных браузерах. Но пока не получается.
Понятно — буду рыть дальше) найду решение обязательно поделюсь
на него и облизываюсь, но хотелось бы бесплатно)
+ он умеет запускать только selenium тесты, а у меня все на qunit — придется их как-то дружить
НЛО прилетело и опубликовало эту надпись здесь
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.