2017-11-16 24 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 
      ) 

관련 자바 스크립트 부분 :

<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") 

repo에 대한 링크 : 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 함수를 호출하면 아무 것도 트리거되지 않습니다. 느릅 나무 런타임에서 처리해야하는 Cmd을 반환합니다.