$jin.atom
Критерии оценки
  1. Способ объявления зависимостей
  2. Способ привязки к DOM
  3. Способ распространения изменений
  4. Размер исходного кода
Зависимости в KnockOut
function AppViewModel( ){
    this.firstName = ko.observable( 'Bert' )
    this.lastName = ko.observable( 'Bertington' )
    this.fullName = ko.computed( function( ){
        return this.firstName() + ' ' + this.lastName()
    }, this )
}
Зависимости в AngularJS
function AppViewModel( $scope ){
    $scope.firstName = 'Bert'
    $scope.lastName = 'Bertington'
    $scope.fullName = ''
    $scope.$watch( function( ){
        return $scope.firstName + ' ' + $scope.lastName
    }, function( next ){
        this.fullName = next
    })
}
Зависимости в $jin.atom
$foo.app.view = function( ){ }

$jin.atom.prop(
{   '$foo.app.view..firstName': { value: 'Bert' }
,   '$foo.app.view..lastName': { value: 'Bertington' } })
,   '$foo.app.view..fullName': {
        pull: function( ){
            return this.firstName() + ' ' + this.lastName()
        }
    }
})
Привязки в KnockOut
<ul data-bind="foreach: names()">
    <li data-bind="text: $data"></li>
</ul>

Шаблон завязан на фиксированный формат данных.

Привязки в AngularJS
<ul ng-repeat="name in names">
    <li>{{name}}</li>
</ul>

Шаблон завязан на фиксированный формат данных.

Привязки в $jin.atom
<ul MyFriends-list="{id}">{friends}</ul>
<li MyFriends-item="{id}">{name}</li>

Шаблон предостовляет слоты, в которые можно поместить любые данные.

Распространение обновлений
slices
V VM M
KnockOut
1.5x recalc
AngularJS
4x digest
$jin.atom
all ok
Размер
Сcылки