2016-03-02 8 views
1

Я знаю, что в ванильном JS можно реализовать сигналы/наблюдаемые/потоки, потому что Elm компилируется обратно в JS.Elm Signals in Vanilla JavaScript?

Может ли кто-нибудь с примера передачи сигнала в JS? Он должен правильно использовать структуру обратного вызова? Например, что Elm переводит это?

main = 
     Signal.map show Mouse.position 

ответ

3

В очень грубом, как вы могли бы думать об этом как эквивалент:

document.onmousemove = handleMouseMove; 

function handleMouseMove(event) { 
    //...extract x and y from event somehow 
    show([x, y]) 
} 

Но есть намного больше, что происходит в Элм, это гораздо больше похоже на наблюдаемые объекты в RXjs https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md

+0

Эй, Себастьян, спасибо за ответ. Мой вопрос действительно более общий - как эти реактивные структуры (сигналы, наблюдаемые, потоки, что ...) обрабатываются в ванильном JS? Каково центральное ядро ​​JavaScript? Я чувствую, что этого не хватает из любых описаний, которые я видел, и они чувствуют себя волшебными. –

+0

Ваш вопрос слишком широк, чтобы ответить на StackOverflow. Я думаю, что Себастьян дал лучший ответ, на который вы поймете, как вы можете рассуждать о Вязе, но если вы действительно хотите понять время работы Elm, то вот статья, которую создатель Эван Чаплицкий написал для своей диссертации https: // www. seas.harvard.edu/sites/default/files/files/archived/Czaplicki.pdf –

2

Простой код, который вы положили, не переводит на простую структуру обратного вызова в JS. Время выполнения Elm немного сложнее. Однако, если вы действительно хотите получить лучшее понимание, вы можете взглянуть на Native implementation of Signal.

+0

Означает ли это, что нет простой мыслительной модели реактивных структур, таких как сигналы, наблюдаемые, потоки, что бы ни было в чистом JavaScript? Являются ли эти структуры неотъемлемо сложными, лишены аналога в ваниле JS? Другими словами, глядя на встроенную реализацию, с которой вы связаны, какие части этого кода являются абсолютно необходимыми битами, которые делают возможным скелет сигналов? –

+1

Это основной наблюдаемый узор. Сигнал является значением с течением времени. Это означает, что вам необходимо вести список наблюдателей и сообщать им, когда изменяется значение. Возможно, это поможет: https://carldanley.com/js-observer-pattern/ – pdamoc