Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Кому-нибудь интересно FRP? (https://javascript.ru/forum/misc/44815-komu-nibud-interesno-frp.html)

tenshi 03.02.2014 18:48

Цитата:

Сообщение от melky (Сообщение 295611)
наверное, нужно больше туториалов. в примере с TODO я ничего не понял :)

Ну вот например вью-модель задачи в списке задач: https://github.com/nin-jin/pms-jin/b...ew_item.jam.js

У него есть свойство current - флаг указывающий, что этот таск сейчас выделен.

Объявляем мы его просто:

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


То есть, берем список в котором отображается вьюшка, смотрим у него текущую задачу и если она совпадает с нашей, то значит вьюшку надо выделить как текущую. При этом нам не надо ни подписываться ни на какие события, ни писать где либо в другой части приложения код для обновления состояния этой вьюшки. Значение этого атома всегда остаётся актуальным.

Maxmaxmaximus7 04.02.2014 00:26

ui поддерживает frp :D

tenshi 04.02.2014 01:30

Ты так и не рассказал каким образом)

Maxmaxmaximus7 04.02.2014 02:00

function Controller() {

    a = 10
    b = 20
    c = (a + b)  // 30

    say = function() {
      a++;
      alert( c ) // 31
    }

}



и вообще-то я рассказал, это называется формулы. я же писал в том топике. с это ячейка которая связана с ячейками a и b по формуле a+b


или вот например, ячейка form динамичски пересчитывается при обращении к ней. и выдает заполненный обьект.


function Controller() {

    name = 'Ашот'
    age = 11

    form = ({
      name: name,
      age : age
    })

    sendForm = function() {
      $http( 'api.php?sendForm', form )
    }

}

tenshi 04.02.2014 02:38

А, ну это твой собствнный язык. Он хоть тьюринг-полный?)

Maxmaxmaximus7 04.02.2014 02:45

Цитата:

Сообщение от tenshi
ну это твой собствнный язык

не сказал бы что это язык) обычные "сниппеты") это можно записать и руками

function Controller() {

    var $$self = this;

    $$self.a = 10
    $$self.b = 20
    $cell( 'c', function() { return $$self.a + $$self.b } )

}



скобочки это просто небольшой сахар) и кстати, я не понял как утверждение "это твой язык" опровергает поддержку FRP? Ведь оно ПОДТВЕРЖДАЕТ поддержку FRP. Я добавил сахарный способ создания формул, и способ этот похож на синтаксис клажуры.

tenshi 04.02.2014 02:51

Ой, да у тебя дигест как в ангуляре.. смерть на больших данных)

Maxmaxmaximus7 04.02.2014 03:23

ну не знай, 5000 ватчеров проверяет 20 миллисекунд на пеньке 4) а вот то что смерть это лишь твоя диванная теория, неболее)

п.с. дайджест блять, дайджест)

Цитата:

Сообщение от tenshi
у тебя дигест как в ангуляре

а что ты предлагаешь? и приведи пример смерти на больших данных

tenshi 05.02.2014 01:17

У меня как в нокауте, большее потребление памяти, но и не перелопачивается вся коллекция на каждый чих.

Допустим, задача: есть список на 50000 задач. Задачи имеют название, описание, статус, список ответственных пользователей, запланированную дату, приоритет. Нужно сортировать по алфавиту, по дате с группировками (на сегодня, на этой неделе, просроченные) и (по приоритетам плюс завершенные - самый низкий приоритет). Любой параметр задачи можно в любой момент изменить и задача должна перелетать на правильное место в списке.

Будет от 200мс на каждый чих?)

Maxmaxmaximus7 05.02.2014 11:27

да, но таких список обычно не бывает по этому это не страшно.
или бывает? я напомню что перелопачивается только то, что собирается рисоваться в html. у тебя и вручную созданные 50000 дивов будут тупить.
По этому это не проблема. На списках размером 1000-2000 перелопачивание не заметно для пользователя. Оно дольше чем в нокаутах но все таки не заметно, так что не страшно. Разумеется в будущем я думаю оптимизировать это, ну так, чтобы приятно было мне. Сделаю полифил для Object.observe геттерами и сеттерами. и буду использовать его за место $digest.

пока такой способ перелопачивания я нахоэу проиемлемым так как в реальности не бывает случаев когда надо перелопатить больше 5000 элементов массива, и такое перелопачивание занимает меньше 10 миллисекунд на моем слабом компьютере pentium 4


Часовой пояс GMT +3, время: 21:27.