Elm模态对话框

Elm模态对话框,elm,Elm,如何将sweet对话框集成到Elm代码中。我已经在我的index.html中包含了JS和CSS。如何在更新函数中调用此JavaScript函数 update : Action -> Model -> (Model, Effects Action) update action model = case action of Submit -> let valid = length model.name > 0 in if v

如何将sweet对话框集成到Elm代码中。我已经在我的
index.html
中包含了JS和CSS。如何在更新函数中调用此JavaScript函数

update : Action -> Model -> (Model, Effects Action)
update action model =
  case action of
    Submit ->
      let valid = length model.name > 0
      in
        if valid 
          then (model, swal({"title": "Invalid name"}))
          else (model, swal({"title": "Valid name"}))

在没有检查所有视图代码的情况下装配一个完整的示例是很棘手的,但我希望这个更简单的版本能有所帮助!从某种程度上说是从

index.html

var so=Elm.embed(Elm.Main,document.getElementById('Main');
so.ports.callSwal.subscribe(doAlert);
函数doAlert(空间){
如果(空间)游泳(“嘿,一个空格键!”);
}
莫代尔·埃尔姆
import Graphics.Element
输入键盘
端口调用:信号布尔
卡尔斯瓦尔港=
键盘空间
main=Graphics.Element.show“按下空格键怎么样?”
我做了些什么来让它工作
$bower安装sweetalert
$elm make modal.elm--output=Main.js
  • 嵌入Elm应用程序,为js提供一个可访问的对象(此处为“
    so
    ”)
  • 在js中,订阅一个命名端口并给它一个回调函数
  • 在elm中创建端口。这一个需要一个简单的
    Bool
    ,但我想你的至少需要一个
    字符串
更好的答案 诀窍是注意到startApp中有一个邮箱,您可以通过
app.model
访问该邮箱

警报消息将成为模型的一部分。如果是空字符串,我们将其解释为“不触发任何警报”

注意。我不知道为什么
update
需要返回一个包含
Events操作的元组。这里没有用过

下面是一个综合起来的例子:

var so=Elm.embed(Elm.Main,document.getElementById('Main');
so.ports.alert.subscribe(函数(文本){
如果(text.length>0)为swal(text);
});
导入StartApp
导入任务(任务)
导入效果(效果,从不)
导入Html(Html、div、输入、按钮、文本)
导入Html.Events(on、onClick、targetValue)
导入字符串(长度)
应用程序:
{html:Signal-html
,型号:信号型号
,任务:信号(任务从不())
}
应用程序=
开始
{init=init
,update=update
,视图=视图
,输入=[]
}
端口警报:信号字符串
港口警报=
Signal.map(\n->n.alert)app.model
主:信号Html
主要=
app.html
--模型
类型别名模型=
{name:String
,警报:字符串
}
初始:(模型、效果和动作)
初始化=
({name=“”
,alert=“”
}
,无影响
)
--更新
类型动作
=提交
|文本输入字符串
更新:动作->模型->(模型,效果动作)
更新动作模型=
案例诉讼
提交->
如果长度model.name>0,则
({model | alert=“Valid name”},Effects.none)
其他的
({model | alert=“Invalid name”},Effects.none)
文本输入文本->
({model | name=txt,alert=”“},Effects.none)
--看法
视图:Signal.Address操作->模型->Html
视图地址模型=
设f=(\str->Signal.message地址(TextEntry str))在
div
[]
[输入
[关于“输入”目标值f]
[]
按钮
[点击地址提交]
[案文“提交”]
]

我想您需要帮助。谢谢您的快速帮助。你能给我举个例子说明我是如何做到这一点的吗?当然,我可以试一试。你能提供更多的代码让我试试吗?另外,我想您希望最后两行的语法是:
swal({title=“Invalid name”})
哦,非常感谢您的帮助:)。我有一个最后的困难,从上面的更新功能向这个信号发送消息。你能告诉我如何从更新功能中拍摄一条消息,这样我就可以连接一些UI动作来发送消息和警报。我刚刚试了一下,但是被卡住了!我自己对elm很陌生,所以还没有看到太多关于StartApp、Effects或任务包的内容(尽管我认为这些都需要理解才能继续!)无论如何,为了我自己的利益值得学习,但我在这方面可能不够快。这帮助我解决了执行任务的问题: