2016-02-12 50 views
1

我試圖找到執行一些JavaScript作爲我的視圖函數的一部分的最佳方式。在視圖函數中,我想創建一個畫布對象,然後執行一個本地函數,根據我的模型將一些數據插入到它中。這些零件看起來很容易編寫,但我不知道如何將它們粘合在一起。作爲視圖函數的一部分執行本機函數/ javascript

如果我只是將本地調用插入到我的視圖代碼中,可能爲了滿足類型系統,它必須生成一些HTML(例如空div)。也許這是正確的做法,但感覺有點ha。。有更好,更習慣的方法嗎?我是否用正確的榆樹方式來思考這個問題?

+0

FWIW,這是爲了試圖使用ChartJS。我知道現在有這樣的庫,但它們有問題,看起來被放棄了,或者不可用。無論如何,我想了解如何將其作爲學習練習。 – abingham

+0

您需要通過端口將數據通過端口輸出並在JavaScript中提取 - 請參閱http://elm-lang.org/guide/interop。由你決定是否創建div來包含你的html中的圖表或者讓Elm這樣做 –

+0

By blog http://simonh1000.github.io/2015/10/elm-architecture-ports/也許會給你一些想法,即使它是關於谷歌地圖而不是圖表。 –

回答

1

我發現最好的辦法是在主模塊中創建一個郵箱是:

messageMailbox : Signal.Mailbox String 
messageMailbox = 
    Signal.mailbox "" 

然後創建一個端口偵聽來自該郵箱的信號:

port messsagePort : Signal String 
port messsagePort = 
    messageMailbox.signal 

在您訂閱此端口的Js:

app.ports.messsagePort.subscribe(function (args) { 
    ... 
}) 

然後,您從您的視圖或您的視圖中向此郵箱發送郵件更新功能(作爲更新情況下的效果):

Signal.send messageMailbox.address message