2016-03-02 34 views
1

我知道可以在vanilla JS中實現signal/observables/streams,因爲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的最佳答案,但是如果你真的想了解Elm運行時,那麼這裏是創建者Evan Czaplicki爲他的論文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