2017-11-16 13 views
1

ネストされたモジュールをネストするように変更して、ネストされたモジュールでポートを動作させようとしています。この場合、Save2.elmはJavaScript関数であるfileSelectedを呼び出します。 しかし、これは動作しません。Elm:ネストされたモジュールでポートが機能しない

デバッグでは、「Json Selected」というメッセージが表示されます。残念ながら、JavaScript関数は決して呼び出されません。 Ports.elmで定義されたポート:Save2.elmの

port fileSelected : String -> Cmd msg 

関連する部分は、 "JSON選択" の部分は、解雇されています

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
     JsonSelected inputBoxId -> 
      (model 
      , fileSelected inputBoxId 
      ) 

関連するJavaScriptの一部:

<script src="main.js"></script> 
<script> 
    var app = Elm.Main.fullscreen(); 
    // This log is shown from start-up 
    console.log("Upload.html console.log is shown") 
    app.ports.fileSelected.subscribe(function (id) { 
     // This log is never shown 
     console.log("fileSelected is executed") 

レポへのリンク: https://github.com/gitLabor8/Elm-Ports-not-working-in-nested-modules

ありがとうございます。

答えて

0

CmdSave2.updateMain.updateで無視されています。

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
     Save2 saveMsg -> 
      ({ model | save2 = Tuple.first (Save2.update saveMsg model.save2) } 
      , Cmd.none 
      ) 

あなたはエルムランタイムがCmdを扱うことができるようにMain.updateからそれを返す必要があります。

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case msg of 
     Save2 saveMsg -> 
      let 
       (save2Model, save2Cmd) 
        = Save2.update saveMsg model.save2 
      in 
       ({ model | save2 = save2Model } 
       , save2Cmd 
       ) 

Elmでは、関数portを呼び出しても何もトリガーしません。 Elmランタイムによって処理される必要があるのはCmdです。

関連する問題