Показать сообщение отдельно
  #4 (permalink)  
Старый 03.02.2014, 23:44
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

> кто поддерживает?

В данном случае представляемая библиотека

> что, если нижний слой влияет на верхний? Получаются те же самые бесконечные вычисления

Нет, будет исключение, ибо это явная ошибка в консерватории)

> Написано сложно. Зачем писать сложно о сложном? Так любой сможет. А ты попробуй просто напиши.

Это и есть просто, на сколько это возможно)

> // формируем цепочку детей (зависимостей)
> atom.children.push(new Atom());

Вот именно этого ручного связывания и хотелось бы избежать.

Смотри, пусть у нас есть такое определение свойства:

$jin.atom.prop({ '$jin.task.view.item..current':
{   pull: function( ){
        return this.list().task() === this.task()
    }
}})


Что тут происходит:
1. функция - это формула вычисления значения
2. когда кто-либо запрашиват значение атома, этот атом добавляет себя в стек слушателей и исполнятет указанную функцию для вычисления значения
3. this.list - это тоже атомное свойство, когда мы запрашиваем ее значение привязанный к ней атом смотрит в стек и связывает себя с атомом с вершины стека, таким образом атом свойства this.current становится слушателем изменений атома свойства this.list
4. this.list() возвращает объект и у этого объекта есть атомное свойство task - аналогично происходит подписка и на него.
5. Ну и в завершении происходит подписка на this.task()

Но сама прелесть в том, что подписки тоже всегда актуальны:

$jin.atom.prop({ '$jin.task.view.item..current':
{   pull: function( ){
        if( this.disabled() ) return false
        return this.list().task() === this.task()
    }
}})


Если в какой-то момент свойство this.disabled станет равно true, то при следующем вычислении this.current ее атом будет отписан от всех атомов кроме атому this.disabled, потому что пока свойство this.disabled не изменится не изменится и значение this.current
__________________
.ня
Ответить с цитированием